Single Number(#136)

编号 名称 等级
136 Single Number Easy

思路

题目要求在给出的数组中,要求找到一个单独的数字。看了一些答案后总结出来了一个运算规律。

按位异或

N ^ N = 0 0 ^ N = N

通过这个规律,那么只要对数组里面的每个数进行按位异或就好。相同的数字按位异或就会是 0 , 剩下的那个单独的数字按位异或还是自己本事,就会直到最后的结论。

代码

class Solution {
    public int singleNumber(int[] nums) {
        int ans = 0;
        for(int i = 0; i < nums.length;i++) {
            ans ^= nums[i];
        }
        return ans;
    }
}

扩展

这种方法还适用于字符串中的唯一一个元素。

代码

class Main {
    public static void main(String[] args) {
        char[] chars = new char[]{'a', 'a', 'b'};
        System.out.println(singleChar(chars));
    }
    // 该程序是判断 数字/字符/字符串。toArrayChar 中的唯一存在的字符
    // 主要方法位 N ^ 0 = N; N ^ N = N
    private static char singleChar(char[] chars) {
        int ans = 0;
        for (int aChar : chars) {
            ans ^= aChar;
        }
        return (char) ans;
    }
}