題目描述
leetcode 第190題:顛倒二進(jìn)制位
顛倒給定的 32 位無符號整數(shù)的二進(jìn)制位瘸味。
提示:
請注意硫戈,在某些語言(如 Java)中下硕,沒有無符號整數(shù)類型梭姓。在這種情況下,輸入和輸出都將被指定為有符號整數(shù)類型罪既,并且不應(yīng)影響您的實(shí)現(xiàn)铡恕,因?yàn)闊o論整數(shù)是有符號的還是無符號的,其內(nèi)部的二進(jìn)制表示形式都是相同的探熔。
在 Java 中驹针,編譯器使用二進(jìn)制補(bǔ)碼記法來表示有符號整數(shù)。因此诀艰,在上面的 示例 2 中柬甥,輸入表示有符號整數(shù) -3,輸出表示有符號整數(shù) -1073741825其垄。
進(jìn)階:
如果多次調(diào)用這個函數(shù)苛蒲,你將如何優(yōu)化你的算法?
示例 1:
輸入: 00000010100101000001111010011100
輸出: 00111001011110000010100101000000
解釋: 輸入的二進(jìn)制串 00000010100101000001111010011100 表示無符號整數(shù) 43261596绿满,因此返回 964176192臂外,其二進(jìn)制表示形式為 00111001011110000010100101000000。
解題方法
位運(yùn)算
參照題解
- 解題思路
定義變量
ret
拼接顛倒后的二進(jìn)制位
在[0,32)的區(qū)間內(nèi)遍歷二進(jìn)制位n
每次迭代,ret
逐步左移漏健,得到二進(jìn)制位的末尾數(shù)字
將末尾數(shù)字拼接到ret
的末尾辜膝,再將n
逐步右移
- 復(fù)雜度
時(shí)間復(fù)雜度:O(1)
空間復(fù)雜度:O(1)
- 代碼實(shí)現(xiàn)
python3
class Solution:
def reverseBits(self, n: int) -> int:
ret = 0
for _ in range(32):
ret = (ret<<1)+(n&1)
n>>=1
return ret
php
class Solution {
function reverseBits($n) {
$ret = 0;
for($i=0;$i<32;$i++){
$ret = ($ret<<1)+($n&1);
$n>>=1;
}
return $ret;
}
}