diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" index 99cb7fe19aaa7..c757d854399d0 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/README.md" @@ -398,6 +398,45 @@ def three_sum(nums) end ``` +#### Swift + +```swift +class Solution { + func threeSum(_ nums: [Int]) -> [[Int]] { + if nums.count < 3 { + return [] + } + let nums = nums.sorted() + var ans = [[Int]]() + let n = nums.count + + for i in 0.. 0 { break } + if i > 0 && nums[i] == nums[i - 1] { continue } + + var j = i + 1 + var k = n - 1 + + while j < k { + let sum = nums[i] + nums[j] + nums[k] + if sum < 0 { + j += 1 + } else if sum > 0 { + k -= 1 + } else { + ans.append([nums[i], nums[j], nums[k]]) + j += 1 + k -= 1 + while j < k && nums[j] == nums[j - 1] { j += 1 } + while j < k && nums[k] == nums[k + 1] { k -= 1 } + } + } + } + return ans + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.swift" new file mode 100644 index 0000000000000..c84cdd215bf95 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 007. \346\225\260\347\273\204\344\270\255\345\222\214\344\270\272 0 \347\232\204\344\270\211\344\270\252\346\225\260/Solution.swift" @@ -0,0 +1,34 @@ +class Solution { + func threeSum(_ nums: [Int]) -> [[Int]] { + if nums.count < 3 { + return [] + } + let nums = nums.sorted() + var ans = [[Int]]() + let n = nums.count + + for i in 0.. 0 { break } + if i > 0 && nums[i] == nums[i - 1] { continue } + + var j = i + 1 + var k = n - 1 + + while j < k { + let sum = nums[i] + nums[j] + nums[k] + if sum < 0 { + j += 1 + } else if sum > 0 { + k -= 1 + } else { + ans.append([nums[i], nums[j], nums[k]]) + j += 1 + k -= 1 + while j < k && nums[j] == nums[j - 1] { j += 1 } + while j < k && nums[k] == nums[k + 1] { k -= 1 } + } + } + } + return ans + } +}