您的位置:首页 > 其它

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

2016-05-10 13:25 429 查看
原题链接: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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: