class Solution {
// 32位,每一位上把数组中数字该位上和相加,每一位结果模3,只出现一次的数字在对应为上因为无法整除,所以为1。
// 将结果串起来,注意位运算细节
public int singleNumber(int[] nums) {
int[] counts=new int[32];
for(int cur:nums){
for(int i=0;i<32;i++){
counts[i]=counts[i]+(cur&1);
cur=cur>>>1;
// cur=cur>>1; 也行,无所谓
}
}
int res=0;
for(int i=31;i>=0;i--){
res=res<<1;
res=res|(counts[i]%3);
// 不能放在最后,会多向左移一位
// res=res<<1;
}
return res;
}
}