题目:
Reverse bits of a given 32 bits unsigned integer.
给定32位的unsigned integer,回传它反转后的值(十进位)
ex:input:00000010100101000001111010011100=>output:964176192(00111001011110000010100101000000)
这题就要用到其他我上次在位元运算(Bit Manipulations)一同学到的运算符号了
会用到的有&,>>
AND,即&是对二进位型态的两数的每一位进行比较
和^不同的是,该位两数都为1才会回传1,其余(0对0,1对0)都回传0
Right Shift,即>>,是将二进位型态的该数每一位元都往右移,然后在最左端补0
Left Shift,即<<,也是类似的道理
class Solution: def reverseBits(self, n: int) -> int: ans=0 for i in range(32): if n&1: ans=ans+2**(31-i) n=n>>1 return ans
我们从用&1来判断最右位(第一位)是1还是0,是1会回传1,是0会回传0
是1的话我们要回传的值(ans)就要加2的31-n次方(n表第几次判断,即第几位数)
因为是reverse所以第一位要当最高位来算
每判断完一次就>>换下一位,总共执行32次(共32位)
最后回传ans即可
最后执行时间31ms(faster than 95.95%)
只要扯到字串,python永远不缺新奇解
分享一个我在讨论区看到的解法
class Solution: def reverseBits(self, n: int) -> int: n=bin(n)[2:] n=(32-len(n))*"0"+n return int(n[::-1],2)
先将unsigned integer变为二进位字串表示(将"0b"去掉)
然后看少了几个数在前端补0(补偿转换时消失的前端0)
上述两步骤其实就是快速将unsigned integer转为字串
之后再reverse转为int回传即可
最后执行时间20ms(faster than99.94%)
本题学习到的重点:位元运算(Bit Manipulations)之AND,Right Shift,Left Shift
那我们下题见