輸入 43261596 (二進制 00000010100101000001111010011100),輸出 964176192 (00111001011110000010100101000000)。
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t res = 0;
for (int i = 0; i < 32; ++i) {
if (n & 1) res |= (1u << (31 - i));
n >>= 1;
}
return res;
}
};
時間 O(32),空間 O(1)。可優化為查表法(8位/16位預計算)提升常數因子。
統計無符號整數二進制中 1 的個數。例:11 → 3。
class Solution {
public:
int hammingWeight(uint32_t n) {
int cnt = 0;
while (n) {
n &= (n - 1); // 消除最低位的 1
++cnt;
}
return cnt;
}
};
循環次數等於 1 的個數,最佳情況 O(1),最壞 O(32)。內建函數 __builtin_popcount 可單指令完成。
反轉 32 位有符號整數數字,溢出返回 0。例:123 → 321,-123 → -321。
class Solution {
public:
int reverse(int x) {
long long res = 0; // 用 64 位暫存避免中間溢出
while (x) {
res = res * 10 + x % 10;
x /= 10;
}
return (res < INT_MIN || res > INT_MAX) ? 0 : (int)res;
}
};
或不使用 64 位,在乘法前預判:if (res > INT_MAX/10 || (res==INT_MAX/10 && pop>7)) return 0;。
| 操作 | 表達式 | 用途 |
|---|---|---|
| 取最低位 1 | x & -x 或 x & (~x + 1) | Lowbit,樹狀數組核心 |
| 消除最低位 1 | x & (x - 1) | 統計 1 的個數、枚舉子集 |
| 判斷 2 的冪 | (x & (x - 1)) == 0 | 快速檢查 |
| 交換兩數 | a ^= b; b ^= a; a ^= b; | 無需臨時變量 |