参考题解:官方题解
问题:
标签:
- 位运算。
思路:
- 对每一位都求和,然后 % 3。如果不为 0,结果就与它
|=
一下。 - 难点1:
sum += ((num >> i) & 1);
- 难点2:
if (sum % 3 == 1) {res |= (1 << i)};
- 上面两个写的都非常漂亮巧妙。
题解:
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = 0;
for (int i = 0; i < 32; i++) {
int sum = 0;
for (int num : nums) {
sum += ((num >> i) & 1);
}
if (sum % 3 == 1) {
res |= (1 << i);
}
}
return res;
}
};