思路:这题思路是把数字拆分成位。int型是C++的内置类型,一般机器上为32位,本题中条件特殊每个数字都有出现k次,只有一个数字出现一次,自然想到对每位上的数字求和后%k,这样求余得到的数字就是我们所想要的。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int singleNumber(vector<int>& nums) {
// write code here
int res,sum;
for(int i=31;i>=0;--i){
int t=0;
for(int j=0;j<nums.size();++j){
t+=(nums[j]>>i)&1;
}
t=t%3;
sum=2*sum+t;
}
return sum;
}
};
复杂度分析: 时间复杂度O(n),空间复杂度O(1)