位运算
Easy
136.只出现一次的数字
题目描述:
思路:
- 异或介绍:
- 如果相对应位值相同,则结果为0,否则为1
- 0 ^ 0 = 0
- 1 ^ 1 = 0
- 1 ^ 0 = 0 ^ 1 = 1
- 从上可以得到如下两个公式:
- a ^ a 因自己与自己的每一位都相同,所以结果为全0
- 0 ^ a = a
- 异或符合交换律 a ^ b ^ c = a ^ (b ^ c) = (a ^ c) ^ b
- 所以A ^ B ^ A = (A ^ A) ^ B = B
- 如果相对应位值相同,则结果为0,否则为1
- 所以将所有的数进行异或,就可以得到那个不同的数(因为相同的数两两异或都变成0了,而任何数与0异或不会发生改变)
代码
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
for(int i = 0; i < nums.length; i++){
result = result ^ nums[i];
}
return result;
}
}