前情提要:Single Number I
原题地址:点我传送
之前做过的那道题由于其他数字只出现过2次,用异或操作的特殊性就可以消除,但是3次,4次呢?
此时还是要按照二进制数的思路走,只要对每一个数的32位逐位计数,3个1就是0,最后按位或给结果即可。
Java:
public class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
for(int i=0;i<32;i++)
{
int sum=0;
for(int x:nums)
{
if(((x >> i) & 1) == 1)
{
sum++;
sum%=3;
}
}
ans |= sum << i;
}
return ans;
}
}