news 2026/5/27 13:10:35

LeetCode 190.颠倒二进制位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 190.颠倒二进制位

问题

给定一个 32 位无符号整数n,要求把它的二进制位全部颠倒过来,并返回颠倒后的结果。

也就是说,原来在最低位的数字会变成最高位,原来在最高位的数字会变成最低位,中间的每一位也都要按顺序反过来。

示例 1:

输入:n = 00000010100101000001111010011100
输出:964176192
解释:颠倒后得到00111001011110000010100101000000,对应的十进制整数就是964176192

示例 2:

输入:n = 11111111111111111111111111111101
输出:3221225471
解释:颠倒后得到10111111111111111111111111111111,对应的十进制整数就是3221225471

思路

首先这道题最直观的想法很明显:既然要颠倒 32 个二进制位,那是不是可以把每一位都拿出来,然后按相反的顺序放到答案里。

题干说的是“颠倒二进制位”,那问题就变成了:怎么从n里依次拿到每一位?二进制里最低位是最容易拿到的,因为n & 1就能得到当前最低位是0还是1

那拿到最低位之后,怎么让它出现在答案的正确位置?我们可以反过来想:答案res一开始是空的,每次先把res左移一位,给新的最低位腾出位置,然后把刚才从n中取出的这一位放进去。

拿一个简化的 4 位二进制举例,假设n = 1101

第一次取出最低位 1,res = 1 第二次取出最低位 0,res = 10 第三次取出最低位 1,res = 101 第四次取出最低位 1,res = 1011

不难发现,这个过程其实就是从右往左读取n,再从左往右构造res。因为题目固定是 32 位,所以循环 32 次就能保证每一位都被处理到,即使前面有很多个0也不会漏掉。

怎么在代码中维护这个过程?只需要两个变量:

  • res表示当前已经构造出的颠倒结果;
  • n & 1表示当前要放进res的那一位。

每轮处理完当前最低位后,再让n右移一位,下一轮继续处理新的最低位即可。

解决

  1. 先定义答案变量res

    res一开始为0,表示还没有放入任何二进制位。

  2. 接着循环 32 次。

    因为题目要求的是 32 位整数,所以不能只循环到n变成0为止。否则像前导0这类位置就不会被正确计算进去。

  3. 每一轮先让res左移一位。

    这样做相当于把已经放进去的位整体往高位移动,给当前新取出的位留出最低位位置。

    res <<= 1
  4. 再取出n当前的最低位,放到res中。

    n & 1可以得到当前最低位,如果这一位是1,就通过或运算放入res;如果这一位是0,则res保持不变。

    res |= (n & 1)
  5. 最后让n右移一位。

    当前最低位已经处理完了,右移之后,下一位就会变成新的最低位。

注意:这里最好使用uint32_t这类无符号类型。因为如果使用int,当最高位为1时,右移可能会受到有符号数规则影响,而这道题本质上处理的是 32 位二进制本身。

classSolution{public:uint32_treverseBits(uint32_tn){uint32_tres=0;for(inti=0;i<32;++i){res<<=1;res|=(n&1);n>>=1;}returnres;}};

时间复杂度为O(32),也就是常数级;空间复杂度为O(1)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 13:06:13

告别重复图片困扰:AntiDupl.NET开源工具帮你智能清理数字垃圾

告别重复图片困扰&#xff1a;AntiDupl.NET开源工具帮你智能清理数字垃圾 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否也曾在数千张照片中迷失方向&#xff1…

作者头像 李华
网站建设 2026/5/27 13:06:04

荣耀600系列手机发布:搭载4K闪光微单Live

荣耀8 5月25日&#xff0c;荣耀600系列正式发布&#xff0c;新品凭借独特“幸运星”潮流设计、全焦段4KLive直出、“教科书级”护眼、8600mAh电池四大核心创新&#xff0c;实现体验全方位升级。 在外观方面&#xff0c;荣耀600系列精准贴合年轻用户对高颜值与美好寓意的双重追求…

作者头像 李华
网站建设 2026/5/27 13:06:00

3PEAK思瑞浦 LMV321X-S5TR SOT23-5 运算放大器

特性电源电压&#xff1a;2.5 V ~ 5.5 V失调电压&#xff1a;最大5 mV带宽&#xff1a;1.5 MHz&#xff0c;压摆率&#xff1a;0.7 V/μs低功耗&#xff1a;每通道100 μA轨到轨输入和输出低1/f噪声&#xff1a;1 kHz时为22 nV/√Hz工作温度范围&#xff1a;-40C ~ 125C

作者头像 李华
网站建设 2026/5/27 13:05:46

如何通过ruoyi-ant框架解决企业级后台系统开发效率问题

如何通过ruoyi-ant框架解决企业级后台系统开发效率问题 【免费下载链接】ruoyi-ant ruoyi-cloud前端工程&#xff0c;使用ant design vue框架 项目地址: https://gitcode.com/gh_mirrors/ru/ruoyi-ant 在当今快速迭代的企业应用开发中&#xff0c;前端开发团队常常面临重…

作者头像 李华
网站建设 2026/5/27 13:02:33

伊辛机与QUBO模型:解决大规模课程选择组合优化问题

1. 项目概述&#xff1a;当课程表遇上伊辛机每到选课季&#xff0c;看着教务系统里密密麻麻的课程列表&#xff0c;你是不是也感到头疼&#xff1f;必修、选修、专业限选&#xff0c;每个类别都有学分要求&#xff1b;课程时间不能冲突&#xff0c;还得兼顾老师的口碑和课程的“…

作者头像 李华
网站建设 2026/5/27 13:02:30

Wi-Fi反向散射通信:多天线检测阈值优化方案详解

1. 项目概述在物联网设备爆炸式增长的今天&#xff0c;如何为海量传感器和微型设备提供持续、可靠且低成本的通信能力&#xff0c;一直是业界面临的巨大挑战。传统的射频通信需要设备自身产生载波信号&#xff0c;功耗是绕不过去的坎&#xff0c;频繁更换电池或布线供电在大型部…

作者头像 李华