方法一:
思路:
(1)先不处理n的最低位,它关系到逆序后的最高位是0还是1。
(2)将其余位的逆序数组元素依次与2的0到31次幂异或即可得到逆序后对应位的值。
(3)若n的最低位是0,则逆序后是正数,最高位是0;若n的最低位是1,则逆序后是负数,最高位是1;需要异或(-2147483648)。
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int result = 0;
int temp = n;
for (int i = 0; i < 31; i++) {
n = n >>> 1;
if ((n & 1) != 0)
result = result ^ (int)Math.pow(2, 30-i);
}
if ((temp & 1) != 0)
result = result ^ (-2147483648);
return result;
}
}
Runtime:4ms
方法二:
思路:
(1)将每一位的逆序数组元素依次乘以2的0到31次幂。
(2)取出每一位置的值后直接左移31~0位,然后相加。
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int result = 0;
for (int i = 0; i < 32; i++)
result += (n >> i & 1) << (31 - i);
return result;
}
}
Runtime:2ms