输入:00000000000000000000000000001011
输出:3
解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
每次去掉二进制中的最后一个1
1010
1000
0
var hammingWeight = function(n) {
let res = 0;
while(n) {
n = (n - 1) & n;
res++;
console.info(parseInt(n).toString(2));
}
return res;
};
输入: n = 27
输出: true
9
3
1
输入: n = 45
输出: false
15
5
1.6666666666666667
var isPowerOfThree = function(n) {
while(n >= 3) {
n = n / 3;
console.info(n);
}
return n === 1;
};
输入: [2,2,1]
输出: 1
相同值异或运算为0,与0进行异或运算为原值
res 运算过程
0 2^2=0
1 0^1=1
var singleNumber = function(nums) {
let res = nums[0];
for(let i = 1; i < nums.length; i++) {
res ^= nums[i];
console.info(res);
}
return res;
};
输入: n = 5
输出: 1
解释: 5! = 120 ,有一个尾随 0
1
var trailingZeroes = function(n) {
let res = 0;
while(n > 1) {
n = (n / 5 | 0);
res += n;
console.info(n);
}
return res;
};
输入: x = -123 输出: -321
输入: x = 120 输出: 21
res=-3 x=-12
res=-32 x=-1
res=-321 x=0
res=0 x=12
res=2 x=1
res=21 x=0
var reverse = function(x) {
let res = 0;
let min = Math.pow(-2, 31);
let max = Math.pow(2, 31) - 1;
while(x) {
res = res * 10 + x % 10;
if(res > max || res < min) return 0;
x = x / 10 | 0;
console.info('res='+res+' x='+x);
}
return res;
};
输入: columnTitle = "AB"
输出: 28
1
28
var titleToNumber = function(columnTitle) {
let ans = 0;
for(let item of columnTitle){
ans = ans * 26 + (item.charCodeAt() - 'A'.charCodeAt() + 1);
console.info(ans);
}
return ans;
};
输入:n = 00000010100101000001111010011100
输出:964176192 (00111001011110000010100101000000)
解释:输入的二进制串 00000010100101000001111010011100 表示无符号整数 43261596,
因此返回 964176192,其二进制表示形式为 00111001011110000010100101000000。
32次循环,一次挪动一位
0 - 1010010100000111101001110
0 - 101001010000011110100111
1 - 10100101000001111010011
11 - 1010010100000111101001
111 - 101001010000011110100
1110 - 10100101000001111010
11100 - 1010010100000111101
111001 - 101001010000011110
1110010 - 10100101000001111
11100101 - 1010010100000111
111001011 - 101001010000011
1110010111 - 10100101000001
11100101111 - 1010010100000
111001011110 - 101001010000
1110010111100 - 10100101000
11100101111000 - 1010010100
111001011110000 - 101001010
1110010111100000 - 10100101
11100101111000001 - 1010010
111001011110000010 - 101001
1110010111100000101 - 10100
11100101111000001010 - 1010
111001011110000010100 - 101
1110010111100000101001 - 10
11100101111000001010010 - 1
111001011110000010100101 - 0
1110010111100000101001010 - 0
11100101111000001010010100 - 0
111001011110000010100101000 - 0
1110010111100000101001010000 - 0
11100101111000001010010100000 - 0
111001011110000010100101000000 - 0
964176192
var reverseBits = function(n) {
let result = 0
for (let i = 0; i < 32; i++) {
result = (result << 1) + (n & 1);
n = n >> 1;
console.info(parseInt(result).toString(2)+' - '+parseInt(n).toString(2));
}
console.info(result >>> 0);
return result >>> 0;
};