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?
Note: Although the algorithm 2 solves the problem with one line code (using the original method in Integer.class),the algorithm 1 is faster than 2.
Algorithm 1:(Runtime:2ms)
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
int result = 0;
int index = 1;
for (int i = 0; i < 32; i++) {
if ((n & index) == index) {
result = result | (1 << (31 - i));
}
index = index << 1;
}
return result;
}
}
Algorithm 2:(Runtime:3ms)
public class Solution {
// you need treat n as an unsigned value
public int reverseBits(int n) {
return Integer.reverse(n);
}
}
本文介绍了一种高效实现32位无符号整数位反转的方法,并对比了两种不同的算法实现,指出算法1在性能上优于算法2。同时,提供了对于反复调用此功能时的优化策略。
860

被折叠的 条评论
为什么被折叠?



