【异或】LeetCode 137. Single Number II

LeetCode 137. Single Number II

Solution1:不会做,抄的
博客转载自:http://www.cnblogs.com/grandyang/p/4263927.html
这道题是之前那道 Single Number 单独的数字 的延伸,那道题的解法就比较独特,是利用计算机按位储存数字的特性来做的,这道题就是除了一个单独的数字之外,数组中其他的数字都出现了三次,那么还是要利用位操作 Bit Operation 来解此题。我们可以建立一个32位的数字,来统计每一位上1出现的个数,我们知道如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0,我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。代码如下:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for (int i = 0; i < 32; ++i) {//int型整数是4字节,32bit
            int sum = 0;
            for (int j = 0; j < nums.size(); ++j) {//统计数组中每个数在第 i bit位上1出现的总次数
                sum += (nums[j] >> i) & 1;
            }
            res |= (sum % 3) << i;//mod3,则把出现3次的排除
        }
        return res;
    }
};
阅读更多
个人分类: LeetCode练习题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭