思路:这题思路是把数字拆分成位。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)