1,题目要求
Reverse bits of a given 32 bits unsigned integer.
将一个数字的二进制形式进行逆转,返回其逆转后的整数形式。
2,题目思路
可以用比较直接的办法,即利用一个容器vector来记录数字的二进制的形式。然后利用reverse方法来实现逆转,最后再将二进制形式的数字转化为数字形式即可。
需要注意的是,int或long是无法存储32位二进制数字的,因此,需要uint32_t的形式来实现。
uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结
方法2是discussion中所提出的,更加简单!
3,程序源码
方法1:
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
int bit = 31;
vector<int> bin (32, 0);
uint32_t res = 0, op = 1;
while(n!=0 && bit>=0){
bin[bit] = n%2;
n = n>>1;
bit--;
}
reverse(bin.begin(), bin.end());
for(int i=31;i>=0;i--){
res += bin[i]*op;
op *= 2;
}
return res;
}
};
方法2:
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result= 0;
for(int i=0; i<32; i++)
result = (result<<1) + (n>>i &1);
return result;
}
};