leetcode刷题五十四
文章目录
题目链接
https://leetcode.cn/problems/number-complement/
题目叙述
对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
题目思路
对于这道题目,我们根据补数的定义可以发现,这个所谓的补数其实就是对一个数字的二进制数字各个位置上面的0,1数字按位取反就可以了,我们根据二进制的数值按位取反的性质可以知道,一个数字与这个数字对应的补数相加的和是等于11111…1111(二进制表达式)(n个1,n的数目就是原本的数字对应的二进制的数字的位数)。于是为了求解一个数字的补数,我们可以首先求出这个数字的二进制表达式,然后计算二进制表达式的位数,接下来,利用11111…1111(二进制表达式)(n个1,n的数目就是原本的数字对应的二进制的数字的位数)减去原本的数字就可以得到了这个数字的补数的数值了。
题目解答代码(JavaScript)
/**
* @param {number} num
* @return {number}
*/varfindComplement=function(num){let n0 = num
let arr0 =[]while(n0 - n0 %2!=0){
arr0.push(n0 %2)
n0 =(n0 - n0 %2)/2}
arr0.push(n0)
console.log(arr0)return2** arr0.length -1- num
};
个人leetcode介绍
最后,介绍一下个人的leetcode,地址为:
https://leetcode.cn/u/huyuxuan-github/
谢谢大家的关注与持续的支持了。
版权归原作者 hhh江月 所有, 如有侵权,请联系我们删除。