亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

JavaScript實現LeetCode第476題:數字的補數

標簽:
JavaScript

题目描述

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

注意:

给定的整数保证在32位带符号整数的范围内。
你可以假定二进制数不包含前导零位。
示例 1:

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

示例 2:

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

解答思路

有三种思路

  1. 先将十进制转为二进制, 然后对每一项作处理(如果是0,则转为1, 如果是1, 则转为0), 然后将该二进制转为十进制.

  2. 对于思路一, 对每一项操作使用异或操作(异或: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0)

  3. 利用二进制的定义


    webp

    二进制运算

补充知识: javascript 进制转换(2进制、8进制、10进制、16进制之间的转换)

javascript中十进制转其他

const x = 5;  
console.log(x);  
console.log(x.toString(8));  
console.log(x.toString(32));  
console.log(x.toString(16));

javascript中其他转为十进制

const x = 5;  
console.log(parseInt(x, 2));  
console.log(parseInt(x, 8));  
console.log(parseInt(x, 16));

解答方案

方法一:

/**
 * @param {number} num
 * @return {number}
 */var findComplement = function(num) {    const a = num.toString(2);    let result = [];    for(let i = 0;i < a.length; i++) {        if(a[i] == 0) {
            result.push(1);
        } else {
            result.push(0);
        }
    }    return parseInt(result.join(''),2);
};

方法二:

/**
 * @param {number} num
 * @return {number}
 */var findComplement = function(num) {    return parseInt(num.toString(2).split('').map((a) => 1 ^ a).join(''), 2)
};

方法三:

/**
 * @param {number} num
 * @return {number}
 */var findComplement = function(num) {    const a = num.toString(2);    let result = 0;    for(let i = 0;i < a.length; i++) {        if(a[i] == 0) {
            result += Math.pow(2, a.length - i - 1)
        } 
    }    return result;
};

         

              



作者:funnycoderstar
链接:https://www.jianshu.com/p/90c10067e1ec


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消