leetcode190-颠倒二进制位
问题描述:
颠倒给定的 32 位无符号整数的二进制位。
示例 1:
输入: 00000010100101000001111010011100
输出: 00111001011110000010100101000000
解释: 输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
示例 2:
输入:11111111111111111111111111111101
输出:10111111111111111111111111111111
解释:输入的二进制串 11111111111111111111111111111101 表示无符号整数 4294967293,因此返回 3221225471 其二进制表示形式为 10111111111111111111111111111111 。
提示:
请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。
在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 2 中,输入表示有符号整数 -3,输出表示有符号整数 -1073741825。
解题思路:
1、对二进制数进行翻转,类似于整数翻转,需要先获得二进制数的末位。可以通过与运算实现(n & 1)。
&运算满足两个同为1,结果才为1,否则为0,这里和1作与运算,最后得到的结果与n的末位相同。
2、获取末位值后,需要获得倒数第二位数值,这里通过移位即可实现:n>>1,使倒数第二位移至末位。我们只需位移 32 次,就能获得 n 的所有二进制位值。
3.使用 res对各个二进制位进行保存。
实现代码
public class Solution {// you need treat n as an unsigned valuepublic int reverseBits(int n) {int res=0; //用res保存n的各个二进制位for(int i=0;i<32;i++){//这里让res先左移的原因是因为从最后一个位开始,每个位左移32-i位,则第1位左移31次,所以res左移放在最前面res=res<<1; //如果当前n的末位是1,那么res++,保证左移完后,res的该位也为1if((n & 1)==1){res++;}//n右移,得到n的倒数第i位n=n>>1;}return res;}
}
注意点:
Java中没有无符号数,只有有符号数,有符号数的移位是算术移位
算术移位的对象是有符号数,在移位过程中符号位保持不变。
对于正数,移位后出现的空位均以0填充。
对于负数,负数的原码数值部分与真值相同,移位时符号位不变,空位添0
负数的反码各位除符号位外与负数的原码正好相反,故移位后所添的代码应该与原码相反,全部添1
所以,Java中负数右移得到的结果仍然是负数。
这里如果颠倒二进制位从高位向低位填充时,可能会出现错误。
如题主一开始写的代码
leetcode190-颠倒二进制位相关推荐
- Leetcode--190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001010010100000 ...
- leetcode190颠倒二进制位(JAVA版)
颠倒给定的 32 位无符号整数的二进制位. 循环32次,每次取出最后一位,放在新的数里,旧的树不断循环右移,新的数不断循环左移 public class Solution {// you need t ...
- 每日一题:leetcode190.颠倒二进制位
题目描述 题目分析 题目本身很简单,没觉得有什么技巧可以再进行优化了,觉得位运算是无法打乱相对顺序的,而这里需要进行镜像颠倒的操作.因此就踏实地写了一个循环. 在使用位运算得到每一位的时候,我吸取了经 ...
- java二进制反转_Java实现 LeetCode 190 颠倒二进制位
190. 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001 ...
- 20190903:(leetcode习题)颠倒二进制位
颠倒二进制位 题目 大致思路 代码实现 题目 大致思路 思路一:将该数与1,10,100- 等32个数做异或运算,判断对应二进制数每一位的数字是0还是1,然后将其存入数组res,最后乘以对应的幂次,即 ...
- 【Leetcode】[190] 颠倒二进制位
[Leetcode][190] 颠倒二进制位 Author: Xin Pan Date: 2022.3.13 题目 原题链接 颠倒给定的 32 位无符号整数的二进制位. 解法 考虑使用位运算来做,因为 ...
- leetcode#190 颠倒二进制位
leetcode#190 颠倒二进制位 题目: 颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 00000010100101000001111010011100 输出: 001110010 ...
- leetcode 190. 颠倒二进制位(位运算)
颠倒给定的 32 位无符号整数的二进制位. 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型.在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有 ...
- leetcode 190. 颠倒二进制位
颠倒给定的 32 位无符号整数的二进制位. 示例 1: 输入: 00000010100101000001111010011100 输出: 0011100101111000001010010100000 ...
- 【LeetCode】190. 颠倒二进制位 easy / bitset / stoul
简单题现在目标25分钟吧:中等题一个小时吧. 重点:input: 无符号整型,output: 无符号整型. 颠倒:是指首位颠倒,而不是01颠倒 stoul(str, nullptr, 2) 第三个参数 ...
最新文章
- 堪称为经典游戏设计帖整理20个点击回复超高的精品贴
- robot framework环境搭建
- 最细的实现剖析:jQuery 2.0.3源码分析Deferred
- app网站换服务器,app切换服务器
- s2sh删掉原本的s2sh project capabilities后重新添加它们
- Makeflie自动生成依赖,自动化编译
- Python-print学习
- c++动态联编与静态联编
- 数字通信原理_推荐 | 从飞鸽传书到数字信号,你不得不懂的通信原理
- android汤姆猫的实验报告,毕业设计(论文)-基于Android的会说话的汤姆猫的设计与实现.doc...
- python是一种解释型、面向什么的计算机程序设计语言_python语言是一种什么类型...
- 30万人追更,年度重磅Go图书出版,百万流量博主带你学习Go底层原理
- 处理“Python使用sympy求解一元三次方程返回结果含I”的问题
- Spark常见面试题及解答
- USB学习入门(三)------众里寻他千百度(windows)
- T a(v);和T a = v;的区别
- C# asp.net 连接 Sql Server数据库 Timeout expired. 错误,怎么办?
- CSS3中的一些新特性(CSS)
- 从人力资源管理的角度看孙悟空大闹天宫
- 【SAP PO】X-DOC:SAP PO 接口配置 REST 服务对接填坑记