边工作边刷题: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

posted @ 2016-06-10 05:17  absolute100  阅读(74)  评论(0编辑  收藏  举报