写点什么

LeetCode 题解:190. 颠倒二进制位,使用遮罩,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2021 年 03 月 04 日
LeetCode题解:190. 颠倒二进制位,使用遮罩,JavaScript,详细注释

原题链接:190. 颠倒二进制位


解题思路:


  1. 使用只有一个1的二进制数当做遮罩mask,如00000000000000000000000000000001

  2. 循环 32 次,每次将遮罩向左移动一位,用n & mask即可判断当前位置是否为 1。

  3. 使用result存储结果,每次循环将result向左移动一位,并将n & mask的结果填入第一位。


/** * @param {number} n - a positive integer * @return {number} - a positive integer */var reverseBits = function (n) {  let mask = 1; // 使用一个遮罩,每次判断二进制中的一位是0还是1,将其赋值给result  let result = 0; // 存储结果
// 以此对比32位二进制数 for (let i = 0; i < 32; i++) { // 每次将结果左移一位,将当前数字填入空位 // 如果将移动放在if语句之后,会导致多移动一位 result <<= 1;
// 判断当前位置是0还是1 if (n & mask) { // 如果是1,才需要填入1 // 如果是0,无需填入,当前位置左移后自然是0 result += 1; }
// 将遮罩左移一位,判断下一个位置 mask <<= 1; }
// 11111111111111111111111111111101,这个Case反转后为负数,需要转换为正数 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift return result >>> 0;};
复制代码


发布于: 2021 年 03 月 04 日阅读数: 9
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:190. 颠倒二进制位,使用遮罩,JavaScript,详细注释