Skip to content

Commit 42486a5

Browse files
klever34yanglbme
andauthored
feat: add swift implementation to lcof2 problem: No.007 (doocs#2977)
* Swift implementation for LCOF2 007 * Update README.md * Update Solution.swift --------- Co-authored-by: Libin YANG <contact@yanglibin.info>
1 parent dca9e5e commit 42486a5

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

lcof2/剑指 Offer II 007. 数组中和为 0 的三个数/README.md

+39
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,45 @@ def three_sum(nums)
398398
end
399399
```
400400

401+
#### Swift
402+
403+
```swift
404+
class Solution {
405+
func threeSum(_ nums: [Int]) -> [[Int]] {
406+
if nums.count < 3 {
407+
return []
408+
}
409+
let nums = nums.sorted()
410+
var ans = [[Int]]()
411+
let n = nums.count
412+
413+
for i in 0..<n-2 {
414+
if nums[i] > 0 { break }
415+
if i > 0 && nums[i] == nums[i - 1] { continue }
416+
417+
var j = i + 1
418+
var k = n - 1
419+
420+
while j < k {
421+
let sum = nums[i] + nums[j] + nums[k]
422+
if sum < 0 {
423+
j += 1
424+
} else if sum > 0 {
425+
k -= 1
426+
} else {
427+
ans.append([nums[i], nums[j], nums[k]])
428+
j += 1
429+
k -= 1
430+
while j < k && nums[j] == nums[j - 1] { j += 1 }
431+
while j < k && nums[k] == nums[k + 1] { k -= 1 }
432+
}
433+
}
434+
}
435+
return ans
436+
}
437+
}
438+
```
439+
401440
<!-- tabs:end -->
402441

403442
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
class Solution {
2+
func threeSum(_ nums: [Int]) -> [[Int]] {
3+
if nums.count < 3 {
4+
return []
5+
}
6+
let nums = nums.sorted()
7+
var ans = [[Int]]()
8+
let n = nums.count
9+
10+
for i in 0..<n-2 {
11+
if nums[i] > 0 { break }
12+
if i > 0 && nums[i] == nums[i - 1] { continue }
13+
14+
var j = i + 1
15+
var k = n - 1
16+
17+
while j < k {
18+
let sum = nums[i] + nums[j] + nums[k]
19+
if sum < 0 {
20+
j += 1
21+
} else if sum > 0 {
22+
k -= 1
23+
} else {
24+
ans.append([nums[i], nums[j], nums[k]])
25+
j += 1
26+
k -= 1
27+
while j < k && nums[j] == nums[j - 1] { j += 1 }
28+
while j < k && nums[k] == nums[k + 1] { k -= 1 }
29+
}
30+
}
31+
}
32+
return ans
33+
}
34+
}

0 commit comments

Comments
 (0)