目录
题目
- 颠倒给定的 32 位无符号整数的二进制位。
示例 1:
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例 2:
输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
法一、字符串
- 思路:无符号整数的二进制位-->二进制字符串-->字符串翻转-->转换成整数
class Solution:
def reverseBits(self, n: int) -> int:
n=bin(n)[2:].zfill(32) #二进制转字符串,并补齐32位,不补齐反转后直接异位,得不到想要的结果
n=n[::-1] #字符串翻转
return int(n,2) #二进制换整数,第二个参数2表示当前数字为二进制
法二、循环
- 把n从右边一个一个取下来放到res的右边
- 代码中和自己理解的左右刚好相反,没有理解
class Solution:
def reverseBits(self, n):
res = 0
for i in range(32):
res = (res << 1) | (n & 1) #1&1结果为1;1&0的结果为0;|有1就为1
n >>= 1 #n右移
return res
标签:二进制位,res,190,整数,颠倒,二进制,32,字符串
From: https://www.cnblogs.com/lushuang55/p/17827357.html