终于还是踏上了算法这条不归路,记录一下做题的历程
颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位。
示例
输入:n = 00000010100101000001111010011100 输出:964176192
(00111001011110000010100101000000) 解释:输入的二进制串
00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
逐位颠倒
逐位枚举n最低位的值,定义一个新变量去接收。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t rev = 0;
for (int i = 0; i < 32 && n > 0; ++i) { // 遍历整个32位数(n的最高位为零时退出)
rev |= (n & 1) << (31 - i); // n从低位开始枚举,将n最低位的值与rev高位做或运算(相当于n的低位逐位给rev高位赋值)
n >>= 1; // 每次右移一位
}
return rev;
}
};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-bits