15. 三数之和(Swift版)

一、题目

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

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

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:

[
  [-1, 0, 1],
  [-1, -1, 2]
]

二、解题

现将nums排序,然后遍历排序后的arr,将赋值当前元素为first,旁边的元素为second(位置为left),最后一个元素为third(位置为right),然后移动left或right(需保证left

  1. 如果(sum=first+second+third)sum>0,则right向左移动,right -= 1;
    2.如果sum<0,则left向右移动,left += 1;
    3.如果sum=0,则将[first, second, third]添加到result中,同时如果第left元素和第left+1的元素相等,则跳过这个元素,如果第right元素和第right-1的元素相等,也跳过这个元素,避免出现重复的三元组.

三、代码实现

    class Solution {
        
        func threeSum(_ nums: [Int]) -> [[Int]] {
            var ret = [[Int]]()
            if nums.count<=2 {
                return ret
            }
            
            var arr = nums.sorted()
            
            for i in 0..0 {
                    break
                }
                if i > 0 && arr[i] == arr[i-1] {
                    continue
                }
                var left = i+1
                var right = arr.count-1
                while left

Demo地址:github

你可能感兴趣的:(15. 三数之和(Swift版))