8
8
9
9
class MissingRanges {
10
10
func findMissingRanges( _ nums: [ Int ] , _ lower: Int , _ upper: Int ) -> [ String ] {
11
- if nums. isEmpty {
12
- return [ getRange ( lower - 1 , upper + 1 ) ]
13
- }
14
-
15
11
var res = [ String] ( )
16
12
17
- for (i, num) in nums. enumerated ( ) {
18
- if i == 0 {
19
- if lower < num {
20
- res. append ( getRange ( lower - 1 , num) )
21
- }
22
- } else {
23
- if nums [ i - 1 ] + 1 < num {
24
- res. append ( getRange ( nums [ i - 1 ] , num) )
25
- }
26
- }
13
+ guard !nums. isEmpty else {
14
+ addRange ( & res, lower, upper)
15
+ return res
27
16
}
28
17
29
- if nums. last! + 1 < upper + 1 {
30
- res. append ( getRange ( nums. last!, upper + 1 ) )
18
+ addRange ( & res, lower, nums [ 0 ] - 1 )
19
+
20
+ for i in 1 ..< nums. count {
21
+ addRange ( & res, nums [ i - 1 ] + 1 , nums [ i] - 1 )
31
22
}
32
23
24
+ addRange ( & res, nums [ nums. count - 1 ] + 1 , upper)
25
+
33
26
return res
34
27
}
35
28
36
- private func getRange( _ numPrev: Int , _ numPost: Int ) -> String {
37
- if numPrev + 2 == numPost {
38
- return " \( numPrev + 1 ) "
29
+ private func addRange( _ res: inout [ String ] , _ start: Int , _ end: Int ) {
30
+ if start > end {
31
+ return
32
+ } else if start == end {
33
+ res. append ( " \( end) " )
39
34
} else {
40
- return " \( numPrev + 1 ) -> \( numPost - 1 ) "
35
+ res . append ( " \( start ) -> \( end ) " )
41
36
}
42
37
}
43
38
}
0 commit comments