LeetCode题解:190. 颠倒二进制位,移动n,JavaScript,详细注释
Opened this issue · 0 comments
chencl1986 commented
原题链接:190. 颠倒二进制位
解题思路:
- 循环32次,每次将
n
向右移动一位,这样就实现了从前向后比较n
。 - 每次都对比
n
的第一位是否为1,如果是就要将1填入result
。 - 每次循环将
result
向左移动一位,实现了将n
颠倒。
/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function (n) {
let result = 0; // 存储结果
// 32位二进制数,因此需要移动32次
// 每次将n的左后一位移动到result的第一位
for (let i = 0; i < 32; i++) {
// 每次将结果左移一位,将当前数字填入空位
// 如果将移动放在if语句之后,会导致多移动一位
result <<= 1;
// 如果当前n的第一个位置为1,则需要将1填入result
if (n & 1) {
// 如果是1,才需要填入1
// 如果是0,无需填入,当前位置左移后自然是0
result += 1;
}
// n向右移动一位,判断下一个位置
n >>= 1;
}
// 11111111111111111111111111111101,这个Case反转后为负数,需要转换为正数
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift
return result >>> 0;
};