88
99 class MissingRanges {
1010 func findMissingRanges( _ nums: [ Int ] , _ lower: Int , _ upper: Int ) -> [ String ] {
11- if nums. isEmpty {
12- return [ getRange ( lower - 1 , upper + 1 ) ]
13- }
14-
1511 var res = [ String] ( )
1612
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
2716 }
2817
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 )
3122 }
3223
24+ addRange ( & res, nums [ nums. count - 1 ] + 1 , upper)
25+
3326 return res
3427 }
3528
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) " )
3934 } else {
40- return " \( numPrev + 1 ) -> \( numPost - 1 ) "
35+ res . append ( " \( start ) -> \( end ) " )
4136 }
4237 }
4338}
0 commit comments