[LeetCode]--190. Reverse Bits(不是很懂的位运算)

简介: 补充知识,Java的位运算(bitwise operators)Reverse bits of a given 32 bits unsigned integer.For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 96

补充知识,Java的位运算(bitwise operators)

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?

Related problem: Reverse Integer

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

public int reverseBits(int n) {
        int reversed = 0;
        for (int i = 0; i < 32; i++) {
            reversed = (reversed << 1) | (n & 1);
            n = (n >> 1);
        }
        return reversed;
    }

懂了按位运算这个程序很容易看懂,但是很难想到。

我的思路是这样的。先转到32位二进制的String,然后交换之后又转到int。我觉得思路是正确的,但是有一些问题,不能通过。

public int reverseBits(int n) {
        String str = intToBinary(n);
        char[] strs = str.toCharArray();
        char temp = ' ';
        int i = 0, j = strs.length - 1;
        while (i < j) {
            temp = strs[i];
            strs[i] = strs[j];
            strs[j] = temp;
            i++;
            j--;
        }
        str = String.valueOf(strs);
        return binaryToInt(str);
    }

    public String intToBinary(int n) {
        String str = "";
        while (n != 0) {
            str = n % 2 + str;
            n = n / 2;
        }
        int len = str.length();
        for (int i = 0; i < 32 - len; i++) {
            str = "0" + str;
        }
        return str;
    }

    public int binaryToInt(String str) {
        int len = str.length() - 1;
        double sum = 0;
        for (int i = 0; i <= len; i++) {
            sum = sum + charToInt(str.charAt(i)) * Math.pow(2, len - i);
        }
        System.out.println(sum + "---" + Integer.MAX_VALUE);
        System.out.println(2147483647 + 1);
        return 0;
    }

    public int charToInt(char c) {
        if (c == '0')
            return 0;
        else
            return 1;
    }

第一个问题在于int会超出范围的。

目录
相关文章
|
7月前
|
存储 算法 程序员
【Leetcode 程序员面试金典 01.01】判定字符是否唯一 —— 位运算|哈希表
可以使用哈希表或位运算来解决此问题:由题可知s[i]仅包含小写字母,int[26]即能表示字符的出现次数;
|
7月前
|
Java 程序员
【Leetcode 程序员面试金典 05.01】插入 —— 位运算
位运算问题,只需要把 N 的 i 到 j 位都置 0 后再和 M 左移 i 位的结果进行按位或即可
|
6月前
|
算法 索引
力扣随机一题 位运算/滑动窗口/数组
力扣随机一题 位运算/滑动窗口/数组
47 0
|
算法 C语言 C++
【位运算问题】Leetcode 136、137、260问题详解及代码实现
此外,任意一个数异或0都为他本身 (这从二进制编码来理解也很好理解,0的二进制编码全为0,任意一个数与其异或不同的就是若干位的1)
96 0
|
算法
leetcode-每日一题1217. 玩筹码(贪心+位运算)
判断元素的奇偶性,把奇数下标记录在odd 元素里
76 0
leetcode-每日一题1217. 玩筹码(贪心+位运算)
|
编译器 API C语言
力扣面试题17.04 - 消失的数字【求和相减 + 异或位运算 + 哈希表】
三种方法巧解力扣面试题17.04 - 消失的数字,你值得拥有
154 0
力扣面试题17.04 - 消失的数字【求和相减 + 异或位运算 + 哈希表】
|
索引
LeetCode 345. Reverse Vowels of a String
编写一个函数,以字符串作为输入,反转该字符串中的元音字母。
104 0
LeetCode 345. Reverse Vowels of a String
|
机器学习/深度学习 NoSQL
LeetCode 344. Reverse String
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
100 0
LeetCode 344. Reverse String
|
算法 C++
LeetCode 338. Counting Bits
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
75 0
LeetCode 338. Counting Bits
LeetCode 190. Reverse Bits
颠倒给定的 32 位无符号整数的二进制位。
92 0
LeetCode 190. Reverse Bits