LeetCode 136. Single Number 题解—— Java

题目链接:https://leetcode.com/problems/single-number/#/description

题目要求:给定一个数组,其中只有一个数字只出现一次,其他数字都出现两次,找出这个只出现一次的数字。

思路:将所有数字进行异或操作,最终得到的结果就是只出现一次的数。因为异或“相同为0,不同为1”,那么一个数的和它本身异或,就会变为0。

举例如下:对于数字 3,7 , 3 进行异或运算 (在此使用4位来表示整数。在java中in为32位,其实也就是前面的28位都为0省略不写, 不会影响结果和异或运算过程)

3 ^ 7 = (0011) ^ (0111) = (0100)

将上述异或的结果再和最后一个3异或 (0100)^ 3 = (0100)^ (0011) = (0111) = 7; 也就找到了只出现一次的数


我们将3个数的异或写到一起

   (0011)                 3

   (0111)                 7

^ (0011)            ^   3

——————      -------------

标红的两行完全相同,异或的结果就是0,所以整个式子的异或结果就是中间那一个行所表示的值,也就是只出现一次的值。


Java代码:

public class Solution {
	// 找到数组中只出现一次的数
    public int singleNumber(int[] nums) {
        // 使用异或操作
    	int temp = 0;
    	for(int i=0; i


你可能感兴趣的:(LeetCode题解)