137. 只出现一次的数字 II

题目链接:137. 只出现一次的数字 II - 力扣(LeetCode)

 

 

 

 

 

 

 

 

 

 

解析:

除了一个数出现一次,其余出现3次,那就是3 * (a + b + c + ```) + x = y

如果x在 0 ~ 2 之间那就可以直接取模了,二进制每一位数都在0 ~ 1 之间,

因此二进制每一位相加,然后再按位取模即可

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int three[32];
        memset(three, 0, sizeof(three));
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            int temp = nums[i];
            for (int j = 0; j < 32; j++) {
                three[j] += (temp & 1);
                temp >>= 1;
            }
        }
        int ret = 0;
        for (int i = 31; i >= 0; i--) {
            ret <<= 1;
            three[i] %= 3;
            ret |= three[i];
        }
        return ret;

        
    }
};

 

posted @ 2025-10-25 18:53  WTSRUVF  阅读(1)  评论(0)    收藏  举报