当前位置: 首页 > news >正文

LeetCode 面试经典150题 190.颠倒二进制位

复习知识:正数的原码、反码、补码相同,负数的反码在其原码的基础上, 符号位不变,其余各个位取反,负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。

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

提示:

  • 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
  • 在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825

示例 2:

输入:n = 11111111111111111111111111111101
输出:3221225471 (10111111111111111111111111111111)
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。

不用管符号,比如示例2,我们输入的整数是正的而且大于Java中int的正数表示范围。所以采用找一个有符号数,它的二进制形式跟我们输入的无符号二进制形式一模一样,我们就把这个有符号数当作无符号数来处理,对其32位都进行颠倒。颠倒后输出结果,把我们的无符号数当作有符号输出即可,我们自己根据补码转换。总而言之,把int n当作无符号数来处理,就把它想象成一个字符串。

思路

执行的 & >> << | 都是位操作,我们不用关心数据是大端存储还是小端存储,怎么进行位运算、符号什么的,因为我们执行的是位运算操作,编译器会为我处理,我们不用管。想像成直接对一个二进制数执行位操作,其余的不用管。

代码

public class Solution {// you need treat n as an unsigned valuepublic int reverseBits(int n) {int res = 0;  // 反转结果,初始为0表示所有位都为0// 循环处理32位,idx为位索引for (int idx = 0; idx < 32; idx++) {int digit = n & 1;  // 获取当前最低位n >>= 1;  // 将最低位右移掉res |= (digit << (31 - idx));  // 将最低位反转到实际位置上}return res;}
}

性能

时间复杂度o(1)

空间复杂度o(1)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微服务Docker相关指令
  • 第三章 Smart X超融合测试历程第三天
  • 边缘计算网关在工业中的应用
  • ⭐ Unity + OpenCV 实现实时图像识别与叠加效果
  • MySQL---创建数据库(基于SQLyog)
  • MySQL系列—11.Redo log
  • 深度学习速通系列:如何使用文本标注工具进行命名实体识别?
  • 关于http的206状态码和416状态码的意义、断点续传以及CORS使用Access-Control-Allow-Origin来允许跨域请求
  • SpringCloud Alibaba之Seata处理分布式事务
  • Git 推送更改到远程仓库
  • 双虚拟机部署php项目
  • AUTOSAR UDS NRC
  • 反病毒技术和反病毒软件(网络安全小知识)
  • DBeaverEE:专业级数据库管理工具,让数据管理更高效
  • GreenPlum与PostgreSQL数据库
  • [Vue CLI 3] 配置解析之 css.extract
  • 【React系列】如何构建React应用程序
  • Android系统模拟器绘制实现概述
  • CSS居中完全指南——构建CSS居中决策树
  • ES学习笔记(12)--Symbol
  • EventListener原理
  • HTML-表单
  • HTTP 简介
  • Koa2 之文件上传下载
  • maya建模与骨骼动画快速实现人工鱼
  • Netty 4.1 源代码学习:线程模型
  • ng6--错误信息小结(持续更新)
  • opencv python Meanshift 和 Camshift
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Windows Containers 大冒险: 容器网络
  • 机器学习学习笔记一
  • 将 Measurements 和 Units 应用到物理学
  • 让你的分享飞起来——极光推出社会化分享组件
  • 转载:[译] 内容加速黑科技趣谈
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云服务器如何修改远程端口?
  • ​比特币大跌的 2 个原因
  • #nginx配置案例
  • #考研#计算机文化知识1(局域网及网络互联)
  • ()、[]、{}、(())、[[]]命令替换
  • (Java入门)学生管理系统
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)h264中avc和flv数据的解析
  • (转)ORM
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .gitignore文件—git忽略文件
  • .NET C# 配置 Options
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET多线程执行函数
  • .net中应用SQL缓存(实例使用)