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

c5dfd1bd574ecf2193fd208f7e5fb149.gif

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

01

题目描述

c84a4b81b2bff620cbd34e71423ac55f.png

题目描述:

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

示例 1:

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

提示:

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

02

思路和方法

由题意可知:

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

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

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

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

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

50d4394375e8918a9e6969231e2e107f.png

我们的代码输出为:

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

c3343e04d19eb662a15f63020e78babd.png

往期回顾

f6a5ea25b40441d59738f30d0f19fe9f.jpeg

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

f41a5d5364a4f453cc99322321e0b08e.jpeg

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

e57a922cc33c08c04905acfd968db605.jpeg

【一天一道Leetcode】丑数

☆ END ☆

66c7d616b8320ca41827e3705fc30507.jpeg

你与世界

只差一个

公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值