逐位操作
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t ans = 0; //所有位初始化为0
for(int i = 31;i >= 0 && n > 0;i--) //遍历32个位,每次将n的最后一位按ans的位从前往后顺序赋值,并将n右移一位。为了节省时间,因为ans初始化所有位为0,当遍历到n剩余位全是0,即n==0时,不必再对ans进行赋值,故退出循环。
{
ans |= (n & 1) << i; //(n&1)将只保留n的最后一位,然后将这一位左移到ans对应位上(用或操作)
n >>= 1; //将n最后一位删掉(n右移一位)
}
return ans;
}
};
对每个32位无符号整数,最多进行32次位操作,时间复杂度O(1),空间复杂度O(1)。