[leetcode] 190. Reverse Bits

来源:互联网 发布:linux ping 编辑:程序博客网 时间:2024/04/30 09:43

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

解法一:

自己看吧,傻白甜做法。。。

class Solution {public:    uint32_t reverseBits(uint32_t n) {                uint32_t res=0;        vector<uint32_t> values(32,0);        bit32_value(values);        int i = 0;        while(n){            res += (n%2)*values[i++];            n = n/2;        }        return res;            }        void bit32_value(vector<uint32_t> &values){        for(int i= 0; i<32; ++i)            values[i] = pow(2,31-i);    }};

解法二:

一遇到bit,就应该想到bit operation。n右移,res左移。如果n当前位为1(用n&1判断), res对应位也该为1。

class Solution {public:    uint32_t reverseBits(uint32_t n) {        uint32_t res = 0;        for(int i=0; i<32; ++i){            if (n&1==1) res = (res<<1) + 1;            else res = res<<1;            n = n >> 1;        }        return res;    }};



0 0
原创粉丝点击