190 reverse bits

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

思路

利用位操作,将掩码设定为0x80000000,利用左移操作,将每一位由高到低放入list中,再倒转。

在最后生成结果的时候也采用移位的方法,从list中取出每一位,并将结果进行叠加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class :
# @return an integer
def reverseBits(self, n):
res = []
for i in range(32):
tmp = n & 0x80000000
tmp = tmp >> 31
res.append(tmp)
n = n << 1
print res
ans = 0
for i in range(32):
ans = ans << 1
ans += res[31 - i]
return ans