LeetCode--190--颠倒二进制位

问题描述:

颠倒给定的 32 位无符号整数的二进制位。

示例:

输入: 43261596
输出: 964176192
解释: 43261596 的二进制表示形式为 00000010100101000001111010011100 ,
     返回 964176192,其二进制表示形式为 00111001011110000010100101000000 

进阶:
如果多次调用这个函数,你将如何优化你的算法?

方法1:常规操作,易错点在给头部补0.

1 class Solution:
2     # @param n, an integer
3     # @return an integer
4     def reverseBits(self, n):
5         input_b = bin(n)
6         input_b = input_b[2:]
7         input_b = "0"*(32-len(input_b))+input_b
8         input_b = input_b[::-1]
9         return int(input_b,2)

方法2:

1 class Solution:
2     # @param n, an integer
3     # @return an integer
4     def reverseBits(self, n):
5         res='{0:032b}'.format(n)#注意转换成32为无符号整形,res=bin(n)在这里会出错,ide不会
6         res=res[::-1]#翻转
7         res=int(res,2)
8         return res

方法3:

1 class Solution:
2     # @param n, an integer
3     # @return an integer
4     def reverseBits(self, n):
5         binary_n = bin(n)
6         reversed_n = ''.join(reversed('{:032d}'.format(int(binary_n[2:]))))
7         return int(reversed_n, 2)

 2018-09-16 07:48:24

猜你喜欢

转载自www.cnblogs.com/NPC-assange/p/9654943.html