题目
- 只出现一次的数字 II
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
class Solution {
public int singleNumber(int[] nums) {
int a = 0;
int b = 0;
for(int i : nums){
a = (a^i) & ~b;
b = (b^i) & ~a;
}
return a;
}
}
解题思路
推荐先把简单版看懂。 Leetcode136 只出现一次的数字
在 只出现一次的数字 中,只需要在两个状态之间进行转化,所以用一个变量就能储存。在本题中,则需要两个变量来存储这种转化的当前状态。
类似这样
- | a | b |
---|---|---|
0 | x | x |
1 | x^i | x |
2 | x | x^i |
3 | x | x |
x & ~x = 0
x & ~0 = x
- | a | b |
---|---|---|
0 | 0 | 0 |
1 | (a^i) & ~b = 0^i & ~0 = i | (b^i) & ~a = 0^i & ~i = 0 |
2 | (a^i) & ~b = i^i & ~0 = 0 | (b^i) & ~a = 0^i & ~0 = i |
3 | (a^i) & ~b = 0^i & ~i = 0 | (b^i) & ~a = 0^i & ~0 = 0 |