我的代码为leetcode 3sum问题给出了不同的输出.有人能纠正我的代码吗?

  • 本文关键字:代码 输出 3sum leetcode 问题 python
  • 更新时间 :
  • 英文 :


我正在尝试解决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]]

最新更新