iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0
佛心分享-刷題不只是刷題

刷經典 LeetCode 題目系列 第 11

經典LeetCode 190. Reverse Bits

  • 分享至 

  • xImage
  •  

在這道題目中,我們要將一個無符號 32 位元整數的二進位進行反轉,並回傳結果。簡單來說,我們要將數字的二進位左右翻轉,然後將新的整數結果回傳。

例如:

  • 輸入 00000010100101000001111010011100(43261596)
  • 輸出 00111001011110000010100101000000(964176192)

這個在本機寫程式時,以輸入 00000010100101000001111010011100 的例子來說要傳入 43261596 進 Solution::reverseBits 這樣才能順利編譯執行。

解法思路

我們的目標是反轉數字的每個位元,所以這道題的基本思路是『逐位提取』和『逐位放回』。步驟如下:

  1. 初始化一個變數 result0,它將用來儲存反轉後的結果。
  2. 從數字的最右邊開始,每次提取出一位,將它放入到 result 的對應位置。
  3. 提取一位後,將數字右移一位,然後將 result 左移一位以為下一次放置位騰出空間。
  4. 重複以上步驟直到所有 32 位元都處理完畢。

實作:

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;
    }
};

參考:
#190. Reverse Bits


上一篇
經典LeetCode 338. Counting Bits
下一篇
經典LeetCode 104. Maximum Depth of Binary Tree
系列文
刷經典 LeetCode 題目80
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言