Leetcode No 190 顛倒二進位制位

2021-10-19 22:58:29 字數 1198 閱讀 3671

顛倒給定的 32 位無符號整數的二進位制位。

示例 1:

輸入: 00000010100101000001111010011100

輸出: 00111001011110000010100101000000

解釋: 輸入的二進位制串 00000010100101000001111010011100 表示無符號整數 43261596,

因此返回 964176192,其二進位制表示形式為 00111001011110000010100101000000。

示例 2:

輸入:11111111111111111111111111111101

輸出:10111111111111111111111111111111

解釋:輸入的二進位制串 11111111111111111111111111111101 表示無符號整數 4294967293,

因此返回 3221225471 其二進位制表示形式為 10111111111111111111111111111111 。

這個問題重點是測試乙個人對資料型別和位操作的基本知識。

在面試的時候逐位顛倒作為最直接的解決方案。

儘管聽起來很簡單,但上述邏輯的不同實現產生不同的解決方案。

例如,要檢索整數 n 中最右邊的位,可以應用模運算(即 n%2)或與運算(即 n &1)。

另乙個例子是,為了組合反轉位(例如 2^a,2^b)的結果,可以使用加法運算(即 2^a+2^b)或再次使用位或運算(即 2^a | 2^b)。

演算法:在這裡,我們將展示基於上述邏輯的實現示例。

關鍵思想是,對於位於索引 i 處的位,在反轉之後,其位置應為 31-i(注:索引從零開始)。

我們從右到左遍歷輸入整數的位字串(即 n=n>>1)。要檢索整數的最右邊的位,我們應用與運算(n&1)。

對於每個位,我們將其反轉到正確的位置(即(n&1)<>1;

power--;

}return rs;

}};時間複雜度:o(log2 n)。在演算法中,我們有乙個迴圈來迭代輸入的最高非零位,即log2 n。

空間複雜度:o(1),因為不管輸入是什麼,記憶體的消耗是固定的。

190 顛倒二進位制位

題目描述 顛倒給定的 32 位無符號整數的二進位制位。示例 1 輸入 00000010100101000001111010011100 輸出 00111001011110000010100101000000 解釋 輸入的二進位制串 00000010100101000001111010011100 表...

leetcode190 顛倒二進位制

思想 定義變數ans儲存反轉之後的二進位制數,預設是全0。變數mask是1,若mask與n相與為真,則n的二進位制形式最後一位為1,此時ans需要和1或,使得當前為二進位制為1,反之ans不變即為0。n不斷左移 左移的目的是去除最後一位二進位制數 直到結束。class solution param ...

leetcode 190 顛倒二進位制位

顛倒給定的 32 位無符號整數的二進位制位。示例 輸入 43261596輸出 964176192解釋 43261596 的二進位制表示形式為00000010100101000001111010011100,返回 964176192,其二進位制表示形式為001110010111100000101001...