LeetCode15-3Sum II In Python

本题要求从给定的列表里面找出三个和为0的数。

解题:考虑先找一个数再找两个数的方法。首先给列表排序,从小到大的顺序。如果列表中的第一个数字大于0或者最后一个数字小于0就没有找的必要了。在定下一个数字后,再从该数后面的数中找到两数,这里要注意用从两边向中间寻找的方式。

代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        if not nums or nums[0]>0 or nums[-1]<0:
            return []
        res=[]
        l=len(nums)
        for i in range(l):
            if i>0 and nums[i-1]==nums[i]:#如果和前一个数相同,则跳过。
                continue
            if nums[i]>0:#遍历到大于0的时候就无法找到三数和为0了,跳过。
                break
            left,right=i+1,l-1
            while right>left:
                if nums[i]+nums[left]+nums[right]==0:
                    res.append([nums[i],nums[left],nums[right]])
                    while right>left and nums[right-1]==nums[right]:
                        right-=1
                    while right>left and nums[left+1]==nums[left]:
                        left+=1
                    right-=1
                    left+=1
                elif nums[i]+nums[left]+nums[right]<0:
                    left+=1
                else:
                    right-=1
        return res

猜你喜欢

转载自blog.csdn.net/nlxxqqh1/article/details/88387827
今日推荐