仅供自己学习记录
LeetCode刷题日记2021-3-29
题目描述:
颠倒给定的 32 位无符号整数的二进制位。
提示:
请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。
示例1
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例2
输入:11111111111111111111111111111101
输出:10111111111111111111111111111111
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
示例3
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例4
输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,
因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
题目简单描述:
给定一个32位长的二进制字符串 将其反转之后在输出
解法1:
代码:
#定义记录结果
res=0
#定义一个计数器
count=32
#进入循环 先将右移一位 然后将n&1(取出n的最低位)的结果加入到res中将n右移一位,计数器减一
while count:
res<<=1
res+=n&1
n>>=1
count-=1
#返回结果 这里bin()函数返回一个整数的int或者长整数的long int的二进制表示 bin函数默认为10
#所以这里将base改为2
return int(bin(res),2)
升级版代码:
res=0
for i in range(32):
res=(res<<1)|(n&1)
n>>=1
return res
解法2:
代码:
#这里的zfill方法返回指定长度的字符串,原字符串右对齐,前面填充0
return int(bin(n)[2:].zfill(32)[::-1],base=2)
题解来源:
https://leetcode-cn.com/problems/reverse-bits/solution/python-de-liang-chong-jie-fa-by-jalan/
bin函数:
https://www.runoob.com/python/python-func-bin.html
zfill方法:
https://www.runoob.com/python/att-string-zfill.html