这道题是上一个的延伸,上一个是每个数字出现两次,这个是每个数字出现三次,找出唯一一个没有出现三次的数字。
同样是用位运算。首先把这些数每一位分别加起来,然后每一位除以3,余数就是没有出现三次的数在这一位的值。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res = 0;
for(int i = 0; i < 32; ++i){
int sum = 0;
for(int j = 0; j < nums.size(); ++j){
sum += (nums[j] >> i) & 1;
}
res |= (sum % 3) << i;
}
return res;
}
};