15. 3Sum_Swift

难度

中等

题目

给定一个整数类型的数组,其中三个数字之和等于0,以二维数组的形式返回所有符合条件的数字组合并且不可重复。
Example 如下:

For example, given array S = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

思路

思路一

运用 hash 表,先确定第一个值,之后再确定第二个值并进行排序,时间复杂度为O(n²)。

代码

方法一

func threeSum(_ nums: [Int]) -> [[Int]] {
    // [值 : 出现的次数]
    var numDict : [Int:Int] = [:]
    // i 是数组里面每项的值
    for i in nums {
        if numDict[i] == nil {
            numDict[i] = 1
        } else {
            numDict[i] = numDict[i]! + 1
        }
    }

    var results : [[Int]] = []
    for (num1, count1) in numDict {

        // 将每一项出现次数进行 减一 操作
        numDict[num1] = count1 - 1

        for (num2, count2) in numDict {

            let num3 = 0 - num1 - num2
            // 进行排序 去除重复项 并且确定 num2
            guard count2 > 0 && num1 <= num2 && num2 <= num3 else {
                continue
            }

            if (num2 == num3 && count2 >= 2) || (num2 != num3 && numDict[num3] != nil) {
                results.append([num1, num2, num3])
            }
        }
        // 将每一项出现次数进行 恢复 操作
        numDict[num1] = count1
    }

    return results
}

你可能感兴趣的:(15. 3Sum_Swift)