leetcode 190. Reverse Bits-二进制翻转|位运算

来源:互联网 发布:软件乱码怎么恢复 编辑:程序博客网 时间:2024/06/05 11:39
原题链接:190. Reverse Bits

【思路】

我们首先要注意 int 在内存中以二进制形式存储,占据32位。我们用一个 int 型整数 ans 来记录结果,我们采用移位操作,原因有两点:1. 注意到移位操作比乘2、除2操作效率更高,2. 移位操作很好地绕开了整型运算的溢出以及符号问题。在每次循环中:ans 每次左移一位,当 n 的最低位为1时,ans 的最低位就变为1,n 每次右移一位。总共进行32次循环:

    public int reverseBits(int n) {        int ans = 0;        for (int i = 0; i < 32; i++) {            ans <<= 1;            if ((n & 1) == 1)                ans++;            n >>= 1;        }        return ans;    }
600 / 600 test cases passed. Runtime: 2 ms  Your runtime beats 44.10% of javasubmissions.
【补充】

上面的解法是每次只需移动1位,这种解法是每第 i 次循环移动 i 位:

    public int reverseBits(int n) {        int ans = 0;        for (int i = 0; i < 32; i++)            ans |= ((n >> i) & 1) << (31 - i);        return ans;    }
600 / 600 test cases passed. Runtime: 2 ms  Your runtime beats 44.10% of javasubmissions.

1 0
原创粉丝点击