在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
解题思路
- 拆数字,统计所有数字二进制位1的出现次数
- 将出现的次数 % 3
- 遍历每个还存在为1的位,计算结果
例2: [3,4,3,3], bit2 = [0, 0, 0, 0]
3: 011
4: 100
3: 011
3: 011
bit2:
将每一位都% 3得到[0, 0, 1],所以001为只出现一次的数的二进制码,计算得结果为1
代码
var singleNumber = function(nums) {
let bit2 = new Array(32).fill(0)
for (let x of nums) {
for (let i = 0; x; i++) {
if (x & 1) {
bit2[i]++
}
x = x >> 1;
}
}
let ans = 0;
for (let i = 0; i < 32; i++) {
if (bit2[i] % 3) {
ans += 1 << i;
}
}
return ans;
};