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;
}
};