题目

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;
};