leetcode中的一题:
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,
使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
看似简单的题,其实蕴藏了很多坑和知识。
def threeSum( nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
a = []
for i in range(0,len(nums)):
for j in range(1 + i ,len(nums)):
for k in range(1 + j ,len(nums)):
if nums[i] + nums[j] + nums[k] == 0:
b = [nums[i],nums[j],nums[k]]
b.sort(reverse=False)
if b not in a:
a.append(b)
else:
pass
else:
pass
return a
总结:
1、用了3层循环 , 注意每个循环的起始数字都不一样
2、列表排序用sort,b.sort(reverse=False)为从小到大。
3、注意如果写:b = b.sort(reverse=False)
,返回的将是None。
应该直接写:b.sort(reverse=False)
就会改变列表并保存。
4、列表添加元素为:a,append(b)
将b添加入a中
5、列表[1,2,3]
和[2,1,3]
不相同
6、若要将两个列表等同,可以先将其排序,再进行判断
7、进行判断时,有个坑:必须先将b排序,再进行判断,不能将排序的程序写入判断语句中,不然将的到错误结果。
例:
#正确表达
b.sort(reverse=False) #先排序,并且会改变b
if b not in a: #后判断
a.append(b)
#错误表达
if b.sort(reverse=False) in a: #不可以在判断中排序
a.appand(b)