题目
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
解题思路
这题比较难, 首先他重复了3次,那么把这三个数字的二进制每一位相加然后%3,得出的必定为0,题目明确说出了只有一个数字为不重复的, 所以这里别的数字都是3的倍数,直接所有数字的二进制位每一个都做相加处理,然后最后%3, 即可得出答案。
Java代码实现
public class SingleNumber {
public int singleNumber(int[] nums) {
int[] tmp = new int[32];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < 32; j++) {
int index = nums[i] >> j;
if((index & 1) ==1){
tmp[j] = tmp[j] + 1;
}
}
}
int res = 0;
for (int i = 0; i < 32; i++) {
if(tmp[i] % 3 == 1){
res = res | (1 << i);
}
}
return res;
}
}