here code, inside of loop, there while loop changes variable i's value. printed out value of before while loop , and after loop, new "before index value" expected start @ "after index value +1". however, "new before index value" increase normal, increase 1 each time. appreciate time.
class solution { func summaryrange(nums: [int]) -> [string] { var result = [string]() if nums.count == 1 { result.append(string(nums[0])+"") return result } var in (0...nums.count-1) { let = nums[i] print("before: \(i)") while i+1<nums.count && (nums[i+1] - nums[i] == 1) { += 1 } if != nums[i] { result.append(string(a) + "->" + string(nums[i])) } else { result.append(string(a)+"") } print("after: \(i)") } return result } } var test = solution() var input = [0,1,2,4,5,7] var result = test.summaryrange(input) print(result)
this code tries result ["0->2","4->5","7"]
this interesting one. think trick (with code cleanup :-]
class solution { func summaryrange(nums: [int]) -> [string] { var result = [string]() var currentrange = [int]() num in nums { if currentrange.isempty { //if range empty, start new range currentrange.append(num) continue } if num - 1 != currentrange.last! { //if not next number in sequence, close range, start new result.append(closerange(currentrange)) currentrange = [] currentrange.append(num) } else if num - 1 == currentrange.last { currentrange.append(num) //if next number, add range } } if !currentrange.isempty { result.append(closerange(currentrange)) //check unclosed ranges } return result } func closerange(range: [int]) -> string { guard range.count > 0 else { return "" } if range.count == 1 { return string(range.first!) } return "\(range.first!)->\(range.last!)" } } var test = solution() var input = [0,1,2,4,5,7] var result = test.summaryrange(input) print(result)
let me know how works you!