File tree 2 files changed +73
-0
lines changed
lcof2/剑指 Offer II 007. 数组中和为 0 的三个数
2 files changed +73
-0
lines changed Original file line number Diff line number Diff line change @@ -398,6 +398,45 @@ def three_sum(nums)
398
398
end
399
399
```
400
400
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
+
401
440
<!-- tabs: end -->
402
441
403
442
<!-- solution: end -->
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments