🌈【LeetCode - 补数求法】- JavaScript =>二进制

1,572 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。


说明:文章部分内容及图片出自网络,如有侵权请与我本人联系(主页有公众号:小攻城狮学前端)

作者:小只前端攻城狮、 主页:小只前端攻城狮的主页、 来源:掘金

GitHub:P-J27、 CSDN:PJ想做前端攻城狮

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


题目描述

给你一个 整数 num ,输出它的补数。补数是对该数的二进制表示取反。

示例1 :

输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。

示例2 :

输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。

思路1:二进制

  • 将参数转化成2进制字符串
  • 定义中间变量接受结果
  • for循环遍历字符串,将其每个元素取反后加入j中
  • 将字符串j转化成10进制返回
const findComplement = num => {
    // 计算num二进制数的长度
    const len = num.toString(2).length;
    // 构造长度为len、全为1的字符串
    const str = new Array(len).fill(1).join('');
    // 转化为二进制数
    const N = parseInt(str, 2);
    return N ^ num;
};

思路2:二进制+十进制

分析:二进制十进制互转,与1异或取反即可

var findComplement = function (num) {
  // 转二进制
  var binary = num.toString(2);
  var complement = '';
  // 取反
  for (i = 0, len = binary.length; i < len; i++) {
    complement += binary[i] ^ 1;
  }
  // 转十进制
  return parseInt(complement, 2);
};

感谢阅读,希望能对你有所帮助,文章若有错误或者侵权,可以在评论区留言或在我的主页添加公众号联系我。

写作不易,如果觉得不错,可以「点赞」+「评论」 谢谢支持❤