题目
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?
Related problem: Reverse Integer
大致意思
反转一个正整数的二进制位,然后根据反转后的二进制,得出相应十进制的数字
例如
43261596 二进制为 00000010100101000001111010011100 反转后为 00111001011110000010100101000000 根据二进制转换为十进制 964176192
解决方案
所以,我们的解决方案和上述流程一致
首先,根据十进制得到二进制
var s = ''; // 二进制表示
var count = 0;
var index = 31;
while (n > 0) {
s = (n % 2) + s;
index--;
n = Math.floor(n / 2);
}
由于我们是要翻转,在得到n
的二进制的时候,我们采用的是s = (n % 2) + s;
的方式。所以如果我们s += (n % 2);
,这样就直接得到了翻转后的二进制
并且我们最后是要转换为十进制,所以在进行翻转的时候就可以进行十进制的计算。
源代码
var reverseBits = function(n) {
var s = '';
var count = 0;
var index = 31;
while (n > 0) {
if (n % 2 !== 0) count += Math.pow(2, index);
index--;
n = Math.floor(n / 2);
}
return count;
};