题目
Reverse bits of a given 32 bits unsigned integer.
Note:
- Note that in some languages such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer type. They should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.
- In Java, the compiler represents the signed integers using 2's complement notation. Therefore, in Example 2 above, the input represents the signed integer
-3
and the output represents the signed integer-1073741825
.
Follow up:
If this function is called many times, how would you optimize it?
Example 1:
Input: n = 00000010100101000001111010011100
Output: 964176192 (00111001011110000010100101000000)
Explanation: The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000.
Example 2:
Input: n = 11111111111111111111111111111101
Output: 3221225471 (10111111111111111111111111111111)
Explanation: The input binary string 11111111111111111111111111111101 represents the unsigned integer 4294967293, so return 3221225471 which its binary representation is 10111111111111111111111111111111.
Constraints:
- The input must be a binary string of length
32
知识点
以python语言来看:
如果a,b是数值变量, 则&, |表示位运算, and,or则依据是否非0来决定输出
# 1&2,2在二进制里面是10,1在二进制中是01,那么01与运算10得到是0
1 & 2 # 输出为 0,
1 | 2 # 输出为3
# 判断变量是否为0, 是0则为False,非0判断为True,
# and中含0,返回0; 均为非0时,返回后一个值,
2 and 0 # 返回0
2 and 1 # 返回1
1 and 2 # 返回2
# or中, 至少有一个非0时,返回第一个非0,
2 or 0 # 返回2
2 or 1 # 返回2
0 or 1 # 返回1
>>右移;<<左移
代码
Solution:
# @param n, an integer
# @return an integer
def reverseBits(self, n):
ret, power = 0, 31
while n:
ret += (n & 1) << power
#ret=ret | (n & 1) << power也可以
n = n >> 1
power -= 1
return ret
我的解法是把输入转为字符串
class Solution:
def reverseBits(self, n: int) -> int:
num_s=str(bin(n))
sum=0
n=31
while (n>=0)&((34-n)<=len(num_s)):
sum=sum+(int(num_s[n-32])*pow(2,n))
n=n-1
return sum