边工作边刷题:70天一遍leetcode: day 63
Summary Ranges
要点:简单题,但如果用start标记求解,有一重要点,即最终边界条件是in。这里就有一个问题,什么时候用in,rule就是看下一段的开始条件和本段的结束条件在哪:如果本段结束等于下一段开始,那么最后的边界条件是in(因为这个相当于一个dummy的下一段),本题就是这样。而比如Reverse Words in a String这题,本段结束是下一个字符为空,并不是下一段开始,所以用in-1(也就是条件为i==n-1或者下一个字符为空)。更进一步说,这是因为结束点要是最后一个字符位置(不包括空格),所以必须在字符串范围之内判断,而不能超过。
class Solution(object):
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
n = len(nums)
res = []
if n==0: return res
start = 0
pre = nums[0]
for i in range(1, n+1):
if i==n or nums[i]!=pre+1:
if i-start-1<1:
res.append(str(nums[start]))
else:
res.append("{0}->{1}".format(nums[start],nums[i-1]))
start=i
if start<n: pre=nums[start]
else:
pre=nums[i]
return res