LeetCode 190. 颠倒二进制位

2023-05-16

题目

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

提示:

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

示例 1:

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

示例 2:

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

详见:190. 颠倒二进制位

思路

  1. 位运算位移
    一个16进制的f代表二进制的4位
    低16位与高16位交换
    每16位中低8位和高8位交换; 1111是f
    每8位中低4位和高4位交换;
    每4位中低2位和高2位交换; 1100是c,0011是3
    每2位中低1位和高1位交换; 1010是a,0101是5
    ‘<<’ 左移运算符
    ‘>>’ 右移运算符
    ‘>>>’ 无符号右移,忽略符号位,空位都以0补齐

  2. 循环截取n的最后一个数字

  3. 当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀

代码

方法一:位运算位移

public class Solution {
    public int reverseBits(int n) {
        n = (n >>> 16) | (n << 16);
        n = ((n & 0xff00ff00) >>> 8) | ((n & 0x00ff00ff) << 8);
        n = ((n & 0xf0f0f0f0) >>> 4) | ((n & 0x0f0f0f0f) << 4);
        n = ((n & 0xcccccccc) >>> 2) | ((n & 0x33333333) << 2);
        n = ((n & 0xaaaaaaaa) >>> 1) | ((n & 0x55555555) << 1);
        return n;
    }
}

方法二:循环截取n的最后一个数字

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int res = 0;
        for(int i = 0; i < 32; i++){
            //res往左移一位,空出最后一个位置,放n的最后一位数字
            res <<= 1;
            //n & 1 表示获取n末尾的一位 res |= 与res += 意思相同
            res |= n & 1;
            //n往右移一位,去掉最后一位数字
            n >>= 1;
        }
        return res;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 190. 颠倒二进制位 的相关文章

  • Java文档注释 Intellij IDEA Generate JavaDoc

    目录 一 说明二 理解三 实现 一 说明 文档注释 Java Doc Comments 是指允许你在程序中嵌入关于程序的信息 xff0c 使你更加方便的记录你的程序的信息你可以使用Javadoc工具软件来生成信息 xff0c 并输出到HTM
  • Java 泛型

    目录 一 说明二 理解三 实现1 泛型类2 泛型方法3 类型通配符 一 说明 泛型 generics 本质是参数化类型 xff0c 所操作的数据类型被指定为一个参数提供编译时类型安全检测机制 xff0c 允许程序员在编译时检测到非法的类型
  • STC51单片机-中断控制LED-物联网应用系统设计项目开发

    目录 一 说明二 重点三 实现四 下载 一 说明 单片机中 中断 处理主要是指单片机暂停当前主程序的执行 xff0c 而去执行更重要或需急迫处理的事件请求的处理程序 xff0c 处理完成后 xff0c 再回到主程序暂停处继续执行 这个事件叫
  • STC51单片机-阵列LED显示-物联网应用系统设计项目开发

    目录 一 说明二 重点三 实现四 下载 一 说明 大部分发光二极管工作电流15mA之间 xff0c 其内阻为20100 电流越大 xff0c 亮度也越高 单片机并行端口P1 xff5e P3驱动发光二极管 xff0c 可以采用图6 1电路

随机推荐