题目:
Given a sorted integer array without duplicates, return the summary of its ranges.
For example, given [0,1,2,4,5,7], return [“0->2”,”4->5”,”7”].
描述:
给出一个没有重复值的排序好的整数数组,返回它的取值范围的集合.
例如:给出[0,1,2,3,4,5,7], 返回[“0->2”,”4->5”,”7”].
Python解决方案:
class Solution:
# @param {integer[]} nums
# @return {string[]}
def summaryRanges(self, nums):
if len(nums) == 0: #如果给出一个空的集合,直接返回一个空的集合
return []
if len(nums) == 1:#如果就只有一个元素
return [str(nums[0])]
'''
至少两个元素的情况:
1 从第2个元素开始遍历:
2 该元素是最后一个元素吗?若是,第3步;否,第6步;
3 该元素与前一个元素连续吗?若是,第4步;否,第5步;
4 若是,将n->nums[i]添加到result里面,返回result
5 将n->nums[i-1]添加到result里面,将nums[i]添加到result里面,返回result
6 该元素与前一个元素连续吗,若是,nums[i]赋值给n.否,第7步;
7 n=m?若是,则前面的取值范围只有一个值,将m添加到result里面;若否,将m->n添加到result里面.
8 遍历至下一个元素,跳回第2步
'''
m = nums[0] # the start
n = nums[0] # the end
result = []
for i in range(1,len(nums)):
if i == len(nums)-1:
if nums[i] != nums[i-1] + 1:
if n == m:
result.append( str(n))
else:
result.append(str(m) + '->' + str(n))
result.append(str(nums[i]))
else:
result.append(str(m) + '->' + str(nums[i]))
elif nums[i] != nums[i-1] + 1: #if bulianxu
if n == m:
result.append( str(n))
else:
result.append(str(m) + '->' + str(n))
n = nums[i]
m = nums[i]
else: #lianxu
n = nums[i]
return result