LeetCode 190. Reverse Bits 题解
2017-03-02 11:09
429 查看
题目链接:点击打开链接
先给出最先想到的解法,java代码如下:
显而易见还有更简单的方法——使用位运算:
思路:将32位的无符号整数n右移32次,每次移动取出最低位,赋值给另一个变量result, 对应于n的右移,result对应地左移32次。(result需要先右移,再将n的最低位赋值给result,否则当输入n=2147483648时,会溢出,因为java的int类型是有符号的,能表示的最大的数是2147483647)
先给出最先想到的解法,java代码如下:
public class Solution { public int reverseBits(int n) { // 将整数转为二进制 String binaryString = Integer.toBinaryString(n); // 二进制字符串反转 int length = binaryString.length(); StringBuffer result = new StringBuffer(); for(int i=length-1; i>=0; i--){ char temp = binaryString.charAt(i); result.append(temp); } int len = result.length(); for(int i=len; i<32; i++){ result.append('0'); } String temp = new String(result); // 将反转之后的二进制字符串转为int // 此处注意:若使用Integer.parseInt(temp,2)则当n=1,3...会溢出出错。 // 举例来说,若n=1,反转之后的String字符串为"10000000000000000000000000000000",表示的整数为2147483648 // 而2147483648已经超过了32位有符号数的最大范围,因此抛出异常 Long intResult = Long.parseLong(temp, 2); return intResult.intValue(); } }
显而易见还有更简单的方法——使用位运算:
思路:将32位的无符号整数n右移32次,每次移动取出最低位,赋值给另一个变量result, 对应于n的右移,result对应地左移32次。(result需要先右移,再将n的最低位赋值给result,否则当输入n=2147483648时,会溢出,因为java的int类型是有符号的,能表示的最大的数是2147483647)
public class Solution { public int reverseBits(int n) { int result = 0; for (int i=0; i<32; i++){ // 取出n的最低位 int least = n & 0x01; // n右移一位 n = n >> 1; // 下面两个步骤需要注意:一定要先左移,再赋值。 // 否则当n=2147483648时,result = result | least 会溢出。 // 将result左移一位 result = result << 1; // 将n的最低位加到result最后一位 result = result | least; } return result; } }
相关文章推荐
- LeetCode No.76 Minimum Window Substring 题解
- LeetCode题解——Combination Sum II
- LeetCode题解:Balanced Binary Tree
- LeetCode题解:Single Number
- 【E】【59】【leetcode题解】Valid Sudoku
- [LeetCode]题解(python):151-Reverse Words in a String
- LeetCode题解:Linked List Cycle
- LeetCode题解:Length of Last Word
- Leetcode题解 - 14. Longest Common Prefix
- LeetCode题解--9. Palindrome Number
- LeetCodet题解--15. 3Sum
- leetCode题解:AddDigits
- leetcode263题 题解 翻译 C语言版 Python版
- leetcode题解-454. 4Sum II
- leetcode题解日练--2016.7.4
- 【题解】【BT】【Leetcode】Binary Tree Level Order Traversal
- LeetCode题解:345. Reverse Vowels of a String
- LeetCode题解-104-Maximum Depth of Binary Tree
- 【题解】【链表】【Leetcode】Linked List Cycle II
- LeetCode题解-100-Same Tree