190. Reverse Bits(反转比特)
题目大意
Reverse bits of a given 32 bits unsigned integer.
中文释义
反转一个给定的 32 位无符号整数的比特位。
示例
- 示例 1:
- 输入:
n = 00000010100101000001111010011100
- 输出:
964176192 (00111001011110000010100101000000)
- 解释:输入的二进制字符串
00000010100101000001111010011100
代表无符号整数 43261596,因此返回 964176192,其二进制表示为00111001011110000010100101000000
。
- 输入:
- 示例 2:
- 输入:
n = 11111111111111111111111111111101
- 输出:
3221225471 (10111111111111111111111111111111)
- 解释:输入的二进制字符串
11111111111111111111111111111101
代表无符号整数 4294967293,因此返回 3221225471,其二进制表示为10111111111111111111111111111111
。
- 输入:
限制条件
- 输入必须是一个长度为 32 的二进制字符串。
进阶
如果这个函数被多次调用,你会如何优化它?
解题思路
通过位操作来反转整数的比特位。从低位到高位逐个检查原数的每个比特位,并将其添加到结果的相反位置。
步骤说明
- 初始化结果
result
为 0。 - 对于 32 位整数的每一位:
- 将
result
左移一位,腾出位置。 - 将
n
的最低位加到result
上。 - 将
n
右移一位,去除已经处理过的最低位。
- 将
- 返回
result
作为反转后的结果。
代码
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result = 0;
for (int i = 0; i < 32; i++) {
result <<= 1; // 左移腾出位置
result |= (n & 1); // 添加 n 的最低位
n >>= 1; // 右移 n 去除已经添加的位
}
return result;
}
};