当前位置: 代码迷 >> 综合 >> LeetCode之 190.Reverse Bits
  详细解决方案

LeetCode之 190.Reverse Bits

热度:58   发布时间:2023-11-19 22:37:42.0

开始刷eetCode ,

LeetCode(190) Reverse Bits

题目如下:

Reverse bits of a given 32 bits unsigned integer.

For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary as 00111001011110000010100101000000).

Follow up:
If this function is called many times, how would you optimize it?

分析

本题中,一开始我按照手工计算二进制的思路,使用了数组进行存储,最后按顺序读取数组。 使用这个方法时,遇到了整型溢出(这么说有些不合理,稍后解释)。最后网上找了方法,是用按位移的方式实现的。

int类型是32位存储,第一位作为符号位的话,最大值只能为2^32 -1 ,二进制表示为 31个1 。 在本题中,如果输入为1,理应返回 1 000…00(31个),然鹅我的做法达不到这个值,编译器自动-1 。

为什么会这样呢? 网上也没有合理的解释,只能暂定为 << 左移操作会把int强行变成无符号int。(java中没有无符号int类型)

 public long reverseBitsFalse(int n) {// int 作为有符号整型,第一位用于表示符号,因此int的最大值 2^31 -1// 错误的方法int[] tmp = new int[32];int id = 0;while (n>0){tmp[id++] = n % 2;n /= 2;}long res = 0;int bb = 31;for(int i=0;i<id;i++){if(tmp[i] == 1)res += Math.pow(2,bb);bb--;}return res;}public int reverseBits(int n) {int result = 0;int i = 0;while (i < 32) {int temp = n & 0x01;n = n >> 1;result = (result << 1) | temp;i++;}return result;}
  相关解决方案