【一天一道Leetcode】颠倒二进制位

看那个码农

共 1451字,需浏览 3分钟

 ·

2021-04-14 07:27


本篇推文共计2000个字,阅读时间约3分钟。



01


题目描述


题目描述:


颠倒给定的 32 无符号整数的二进制位。


示例 1:

输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释:
输入的二进制串 00000010100101000001111010011100
表示无符号整数 43261596,
因此返回 964176192,
其二进制表示形式为 00111001011110000010100101000000。


提示:

输入是一个长度为32的二进制字符串。




02


思路和方法


由题意可知:


我们可以将输入num视为一个长为32的二进制串,从高往低枚举num的每一位,通过取余的形式判断该位数是否数值为1。


同时新建一个新的二进制串rev,如果num所在位数取余后结果为1,将1赋给rev。  


这样进行一轮操作后,将rev的二进制左移1位,num二进制右移一位,继续判断下一个数。


直到最后完全输出rev的结果

即为颠倒二进制后的结果。




我们的代码输出为:

class Solution:
    def reverseBits(self, n: int) -> int:
        rev=0
        i=0
        for i in range(32):
            rev<<=1
            if n%2==1:
                rev+=1
            n>>=1
            i+=1
        return rev




往期回顾

【年终总结】你好2021,再见2020。


【玩转Python】DIY贪吃蛇游戏复盘


【一天一道Leetcode】丑数




☆ END ☆

你与世界

只差一个

公众号

浏览 6
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报