剑指 Offer 56 - II.数组中数字出现的次数II
描述一下大佬的思路:将所有数的二进制值按位加起来再按位除以3取余,最后会得到只出现一次的数的二进制表示。再通过移位和或运算将二进制恢复成10进制即可。
class Solution {
public int singleNumber(int[] nums) {
int[] count = new int[32];
for(int i = 0; i < nums.length; i++) {
for(int j = 0; j < 32; j++) {
count[j] += nums[i] & 1; //将nums数组中所有数的二进制值按位加起来
nums[i] >>>= 1;
}
}
int m = 3, res = 0;
for(int i = 0; i < 32; i++)
{
res <<= 1;
res |= count[31 - i] % m;//将二进制表示恢复成10进制
}
return res;
}
}