leetCode No.228 Summary Ranges

题目


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"].


标签:array
相似问题: (M) Missing Ranges, (H) Data Stream as Disjoint Intervals

题意

给定一个没有重复的数组,若数组中有从n到n+i是连续的,则转换为“n->n+i”的形式表示,若为间断点n则用“n”来表示。

解题思路

指定两个指针,begin和end分别指向一个连续数字的起始和结束数字。另begin和end同时指向数组头部,遍历数组,若连续则将end后移,若不连续,则判断begin和end是否相等,若不相等则是一个区间,就可以转换为“begin->end”,然后将begin和end都指向下一个数。若begin和end相等,则说明是一个间断点。用“begin”表示。

代码

class Solution(object):
    def summaryRanges(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        re = []
        if len(nums) == 0:
            return re
        begin = nums[0]
        end = nums[0]
        for i in range(1,len(nums)):
            if nums[i] - 1 == nums[i - 1]:
                end += 1
            else:
                if begin != end:
                    re.append(str(begin) + "->" + str(end))
                else:
                    re.append(str(begin))
                begin = nums[i]
                end  = nums[i]
        if begin != end:
            re.append(str(begin) + "->" + str(end))
        else:
            re.append(str(begin))
        return re

相关链接

源代码(github)
原题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值