题目描述
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
解题思路1: 转字符串
首先想到的是将32位Int转为字符串, 然后将字符串反转, 在输出
示例代码 1:
def reverseBits(n: int) -> int:
n = format(n, "032b")
n = n[::-1] # [::-1] 表示将数组倒序输出
return int(n, 2)
解题思路2: 位运算
对于二进制数, 更多的我们会使用位运算进行操作, 每次得到原数的最后一位, 并依次将最后一位右移, res加上最后一位数只有左移
示例代码 2:
def reverseBits(n: int) -> int:
res = 0
count = 32
while count != 0:
res = (res << 1) + (n & 1)
n >>= 1
count -= 1
return res
哈哈哈, 以后的算法题目都会用python来写,因为实在是太简单了, 比Swift要简单27倍 (胡乱说的~~)