1. 题目描述
2. 代码
1 class Solution: 2 def reverseBits(self, n: int) -> int: 3 return int ( bin(n)[2:].zfill(32)[::-1], 2)
思路: 先把输入的整数转换为二进制, 若不够32位则填充上0, 再反转, 最后输出十进制.
补充代码:
1 class Solution: 2 def reverseBits(self, n: int) -> int: 3 l = [0] * 32 #n的二进制表示 4 pos = 0 5 while n != 0:#获得n的二进制表示 6 cur = n % 2 7 l[pos] = cur 8 pos += 1 9 n = n // 2 10 l.reverse()#将n的二进制反转, 为了以下十进制转二进制的时候对应位相乘匹配第13行i的从0-31. 11 12 ret = 0 13 for i in range(32):#计算n的二进制反转的值 14 cur = l[i] 15 ret += cur * pow(2,i) 16 return ret
3. 语法整理
3.1 bin(): 十进制转二进制.
1 n=5 2 print(bin(5)) 3 4 0b101
3.2 zfill()方法返回指定长度的字符串, 原字符串右对齐, 前面填充0.
3.3 切片[::-1]
1 import numpy as np 2 a=np.random.rand(5) 3 print(a) 4 print(a[::-1]) #取从后向前(相反)的元素
[0.85778706 0.31132653 0.8227913 0.00911271 0.83932792]
[0.83932792 0.00911271 0.8227913 0.31132653 0.85778706]
3.4 int函数: int(x, base=10)
https://www.runoob.com/python/python-func-int.html , 来自菜鸟教程.
- x -- 字符串或数字.
- base -- 进制数, 默认十进制.
1 print(int('0b1010',2))
10
3.5 比较 / 和 //
右移1位相当于除以2.
左移1位相当于乘以2.
3.6 pow(x,y): x**y 运算后的值.