提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
136. 只出现一次的数字
题目链接
思路
异或消消看
- 利用异或特性,两个相同的进行异或相消可解这题
题解
var singleNumber = function (nums) {
let res = 0;
for (let i = 0; i < nums.length; i++) {
res ^= nums[i];
}
return res;
};
191. 位1的个数
题目链接
思路
利用位与消一的特征,遇到1计算加一
位与又被称为无进位相加
题解
function hammingWeight(n: number): number {
let res = 0;
while (n) {
n &= n - 1;
res++;
}
return res;
};
461. 汉明距离
题目链接
思路
对于两个数来说,如果相同位置的二进制相同,则对应汉明距离为0,否则为1,满足异或的性质,所以将两个数异或,求异或结果后位一的个数
题解
var hammingWeight = function (n) {
let res = 0
while (n) {
n &= (n - 1)
res++
}
return res
};
var hammingDistance = function(x, y) {
let num = y^x;
return hammingWeight(num)
};
137. 只出现一次的数字 II
题目链接
思路
- 将每个数转换成二进制以后排列起来
- 将每个位分别计算,如果加起来是3的倍数,说明只出现一次的数的对应位是0,否则是1
题解
function singleNumber(nums: number[]): number {
let ret = 0;
for (let i = 0; i < 32; i++) {
let ans = 0
for (let j = 0; j < nums.length; ++j) {
ans += (nums[j] >> i) & 1
}
ans %= 3
if (ans) {
ret += 1 << i
}
}
return ret
};