题目来源:https://leetcode-cn.com/problems/WGki4K/
大致题意:
给一个数组,其中只有一个数字出现一次,其他数字出现三次,求出出现一次的数
思路
- 遍历整形的所有位数
- 对于每个位数,求出数组所有数该位出现的次数。若出现次数对 3 取余结果为 1,则表示所求数字对应位数为 1
代码:
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
// 遍历所有位数
for (int i = 0; i < 32; i++) {
int count = 0;
// 遍历数组
for (int num : nums) {
// 求出当前位为 1 的数的个数
if (((num >> i) & 1) == 1) {
count++;
}
}
// 出现次数对 3 取余结果为 1,则所求数该位为 1
if (count % 3 == 1) {
ans |= 1 << i;
}
}
return ans;
}
}