题目在这​​:https://leetcode-cn.com/problems/summary-ranges/​

思路分析:

这道题没有什么算法上的难点,就是小地方比较多,多多试错就能写出来。

这里我在原始数组的最后添加了一个 极大的数,避免讨论末尾的情况。

比如有数组 : ​​nums = [0,2,3,4,6,8,9]​当指针指向9时 如果没有最后添加的数值,则在比较 if nums[i] + 1 != nums[i+1]: 的时候会下标越界,但添加了最后的数值,则不会越界,且必然会将9最为最后一个结尾数字添加到答案res中。然后跑去外面判断是否为最后一个数值。所以在末尾添加一个极大的数组,避免讨论末尾情况.

相关解释写在注释了,一看就懂

完整代码

class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
res = []
i = 0
if not nums: # 空数组情况
return nums
if len(nums) == 1: # 数组中只有一个数的情况
res.append(str(nums[0]))
return res

nums.append(2 ** 32)

while True:
start = nums[i] # 开始数字标记
while True:
if nums[i] + 1 != nums[i+1]: # 已经不连续了
if nums[i] == start: # 不连续的字符和开始的标记一样
res.append(str(nums[i]))

else:
res.append(str(start) + '->' + str(nums[i]))
i += 1
break
i += 1
if i == len(nums)-1: # 已经是最后一个数字了。
res.append(str(nums[i]))
break
print(res)
res.pop()
return