我正在尝试解决Leetcode问题'3sum'。
问题如下:给定一个包含n个整数的数组nums,在nums中是否存在元素a, b, c使得a + b + c = 0?找出数组中所有唯一的和为0的三元组。注意,解决方案集不能包含重复的三元组。
的例子:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
下面是我的代码和输出。
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
result = []
nums.sort()
for i in range(len(nums)):
if nums[i] > 0:
break
if i == 0 or nums[i] != nums[i-1]:
continue
left, right = i+1, len(nums)-1
while left < right:
prod = nums[i]+nums[left]+nums[right]
if prod > 0:
right -= 1
elif prod < 0:
left += 1
else:
result.append([nums[i],nums[right],nums[left]])
left += 1
right-= 1
while left < right and nums[left] == nums[left-1]:
left += 1
return result
有谁能告诉我我的代码有什么问题吗?可以使用3个嵌套的for循环来遍历每个组合,并对数字进行排序,并检查排序后的组合是否已经在结果中。
nums = [-1,0,1,2,-1,-4]
result=[]
for i in range(len(nums)):
for j in range(i+1, len(nums)):
for k in range(j+1, len(nums)):
#print(i, j, k, ':', nums[i], nums[j], nums[k])
if (nums[i]+ nums[j]+ nums[k])==0:
#print('***', i, j, k, ':', nums[i], nums[j], nums[k])
r = sorted([nums[i], nums[j], nums[k]])
if r not in result:
result.append(sorted([nums[i], nums[j], nums[k]]))
print(result)
生产是:
[[-1, 0, 1], [-1, -1, 2]]