functhreeSum(_nums: [Int]) -> [[Int]] { guard nums.count >=3else { return [] } let numbers = nums.sorted(by: <) // 先将数组从小到大排序 var res = [[Int]]() for (index, value) in numbers.enumerated() { if value >0 { // 找每个组合的第一个元素就大于0,后面的只会更大,不可能有和为0的组合 break } if index >0&& numbers[index -1] == value { continue// 如果当前元素跟前一个元素相等,进入下一轮遍历 } var left = index +1 var right = numbers.count -1 while left < right { let sum = value + numbers[left] + numbers[right] if sum ==0 { res.append([value, numbers[left], numbers[right]]) left +=1 right -=1 // left后移到跟当前组合中的left位置元素不相等的位置 while left < right && numbers[left] == numbers[left -1] { left +=1 } // right前移到跟当前组合中的right位置元素不相等的位置 while left < right && numbers[right] == numbers[right +1] { right -=1 } } elseif sum <0 { left +=1 } else { right -=1 } } } return res }