首页 > 其他 > 详细

LeetCode 15.三数之和

时间:2020-07-10 10:33:28      阅读:48      评论:0      收藏:0      [点我收藏+]

给你一个包含 n 个整数的数组?nums,判断?nums?中是否存在三个元素 a,b,c ,使得?a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        ans = []
        nums = sorted(nums)
        #print(nums)
        for flag in range(len(nums)-2):
            """去重:nums[flag-1]已经搜索过了,重复nums[flag]直接跳过"""
            if flag > 0 and nums[flag] == nums[flag-1]:
                continue
            left = flag + 1
            right = len(nums) - 1            
            while left < right:
                tmp_sum = nums[flag] + nums[left] + nums[right]
                #print(tmp_sum,flag,left,right)
                if tmp_sum > 0:
                    right -= 1
                    while (left < right and nums[right] == nums[right+1]):   # 跳过重复
                        right -= 1
                elif tmp_sum < 0:
                    left +=1
                    while (left < right and nums[left] == nums[left-1]):     # 跳过重复
                        left += 1
                else:
                    ans.append([nums[flag],nums[left],nums[right]])
                    right -= 1
                    left +=1
                    while (left < right and nums[right] == nums[right+1]):   # 跳过重复
                        right -= 1
                    while (left < right and nums[left] == nums[left-1]):     # 跳过重复
                        left += 1           
                
        return ans 

LeetCode 15.三数之和

原文:https://www.cnblogs.com/sandy-t/p/13277418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!