题目
Reverse bits of a given 32 bits unsigned integer.
For example, given input 43261596
return 964176192 (represented in binary as 00111001011110000010100101000000).
Follow up:
If this function is called many times, how would you optimize it?
Related problem: Reverse Integer
解答
@requires_authorization
class Solution:
# @param n, an integer
# @return an integer
def helper(self, n, a, count):
if n == 0:
return a
else:
return self.helper(n/2, a + (n%2) * (2**(31-count)), count + 1)
def reverseBits(self, n):
return self.helper(n, 0, 0)
解释
二进制表示过程见上一篇文章,而二进制反转,只需要将相应的低位变为高位,只需要记录当前的位count即可,对应的反转位即(31-count),计算得到反转后的结果。
当前算法复杂度为O(log n)