07
04/2015
[LeetCode] Reverse Bits
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;
}
};二次刷题(2015-08-06)
注意sizeof只是字节数,还需要乘以8才是位数。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result = 0;
for(int i = 0; i<sizeof(uint32_t)*8; i++){
result = result << 1;
result += n & 0x1;
n = n>>1;
}
return result;
}
};转载请注明:康瑞部落 » [LeetCode] Reverse Bits

0 条评论