LeetCode 190 _ 位运算

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 运算后的值.

原文地址:https://www.cnblogs.com/vvzhang/p/13747078.html