您的位置:首页 > 其它

[leetcode] 190. Reverse Bits

2016-07-28 13:00 302 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  easy leetcode