Skip to content

Commit d70171a

Browse files
committed
Swift implementation for LCOF2 007
1 parent e3f683b commit d70171a

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,42 @@ def three_sum(nums)
398398
end
399399
```
400400

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

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

0 commit comments

Comments
 (0)