在這道題目中,我們要將一個無符號 32 位元整數的二進位進行反轉,並回傳結果。簡單來說,我們要將數字的二進位左右翻轉,然後將新的整數結果回傳。
例如:
00000010100101000001111010011100
(43261596)00111001011110000010100101000000
(964176192)這個在本機寫程式時,以輸入 00000010100101000001111010011100
的例子來說要傳入 43261596 進 Solution::reverseBits 這樣才能順利編譯執行。
我們的目標是反轉數字的每個位元,所以這道題的基本思路是『逐位提取』和『逐位放回』。步驟如下:
result
為 0
,它將用來儲存反轉後的結果。result
的對應位置。result
左移一位以為下一次放置位騰出空間。實作:
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
uint32_t result = 0;
for (int i = 0; i < 32; i++) {
uint32_t bit = n % 2;
n = n >> 1;
result = (result << 1) | bit;
}
return result;
}
};