您的位置:首页 > 编程语言 > C语言/C++

[LeetCode] Reverse Bits

2015-04-07 15:03 316 查看
Reverse Bits

Reverse bits of a given 32 bits unsigned integer.

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

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 result=0;
int size = sizeof(uint32_t)*8;
for(int i=0; i<size; i++){
result = result << 1;
result += n%2;
n=n>>1;
}
return result;
}
};注意到,倘若n是一个很小的数,根本就不需要循环size位,若n右移一定位后为0,便可以跳出循环。result再左移剩下的位数即可。下面是优化后的代码:

class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result=0;
int size = sizeof(uint32_t)*8;
int i=0; //已经移动的位数
while(n!=0){
result = result << 1;
result += n%2;
n=n>>1;
i++;
}
result <<= size - i;
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ leetcode