这道题的思路比较简单,将n转换成二进制,存入数组中,然后再反向计算这个二进制的值即可。只不过我们可以使用移位操作来替代除法或者求2的幂,可以提高效率。此外,这道题用java实现比较简单,因为java.lang.Integer已经为我们提供了相应的方法。
方法一:
使用java.lang.Integer中的reverse方法,直接可以返回反转后的值。
但效率相对较低,Runtime: 297 ms
public class Solution {
public int reverseBits(int n) {
return Integer.reverse(n);
}
}
方法二:
用上面我说的移位操作,C语言实现。
效率比较高,Runtime: 4 ms
uint32_t reverseBits(uint32_t n) {
int i;
uint32_t bin[32];
//初始化
for(i = 0;i<32;++i)
{
bin[i] = 0;
}
for(i = 31;i>=0;i--)
{
if(n == 0)
break;
bin[i] = n % 2;
n = (n >> 1);
}
//用左移并累加实现二进制计算
uint32_t ans = 0;
for(i = 0;i<32;++i)
ans += (bin[i] << i);
return ans;
}