下一个数
思路:
- 求出从最低位的1开始的连续的1的区间
- 将此区间全部变为0,并将区间左侧的那个0变为1
- 将第1步取出的区间右移,直到剩下的1的个数减少一个
- 将第2步和第3步的结果相或
/** * @param {number} num * @return {number[]} */ var findClosedNumbers = function(num) { const nextMax = function(num){ let x = num &-num let y = x + num return (num & ~ y) / x >> 1 | y } if(num === 1) return [2, -1] if(num === 2147483647) return [-1, -1] let max = nextMax(num) let min = ~nextMax(~num) if(max < 0) max = -1 return [max,min] };
整数转换
标签:return,金典,number,param,---,程序员,num,let,max From: https://www.cnblogs.com/dgqp/p/17327518.html思路:
n=A^B
,可以得到A
和B
有哪几位不同的,即n
二进制1
的个数,就是A
和B
有几位不同的数量n=n & (n - 1)
可以去掉n
二进制的最右边的一个1
,可以统计1
的数量/** * @param {number} A * @param {number} B * @return {number} */ var convertInteger = function(A, B) { let n = A^B let count = 0 while (n) { n = n & (n - 1); count++; } return count; };