题目链接简述: 找出nums列表中单独出现的数字
python:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return reduce(lambda x, y: x^y, nums)
解析:
-
异或
小明要么在北京, 要么在上海, 那么异或就是, 不允许小明同时在北京和上海, 或者同时不在北京或上海, 此时异或为0(假). 如果在北京, 为1(真), 如果在上海, 为1(真).
性质:
解题用到的性质是: x^x = 0, x^0=x. 也就是说, 将所有元素进行异或运算, 写成一个x1 ^ x2 ^ x3 ... ^ xn的表达式, 相同的元素异或得到0, 而剩下的单个元素异或0得到它本身, 也就找出了单独出现的元素.
-
reduce函数
reduce接收两个参数: (函数, 数据), 它会将数据的前两个传入函数, 再将结果与第三个数据计算, 以此类推直到遍历完整个数据. 因为函数简单, 不需要单独写一个函数, 直接用lambda匿名函数处理即可.