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

思路:这题我想的还是使用双指针来做,但是要考虑的东西有点多,所以代码会显得有些繁琐。

class Solution(object):
    def summaryRanges(self, nums):
        """
        :type nums: List[int]
        :rtype: List[str]
        """
        i, j = 0, 1
        ans = []
        if not nums:
        return ans
        while j<len(nums):
            if nums[j] != nums[j-1]+1 and j == i+1:
                ans.append(str(nums[i]))
                i = j
            elif nums[j] != nums[j-1]+1 and j!=i+1:
                ans.append(str(nums[i])+'->'+str(nums[j-1]))
                i = j
            j += 1
        if j == i+1:
            ans.append(str(nums[-1]))
        else:
            ans.append(str(nums[i])+'->'+str(nums[-1]))
        return ans

这里还有一个别人的更简单的代码:

class Solution:
    # @param {integer[]} nums
    # @return {string[]}
    def summaryRanges(self, nums):
        ranges = []
        if not nums:
            return ranges

        start, end = nums[0], nums[0]
        for i in xrange(1, len(nums) + 1):
            if i < len(nums) and nums[i] == end + 1:
                end = nums[i]
            else:
                interval = str(start)
                if start != end:
                    interval += "->" + str(end)
                ranges.append(interval)
                if i < len(nums):
                    start = end = nums[i]
        return ranges

后来还在discuss里看到两端神代码,第一个是:

def summaryRanges(self, nums):
    ranges = []
    for n in nums:
        if not ranges or n > ranges[-1][-1] + 1:
            ranges += [],
        ranges[-1][1:] = n,
    return ['->'.join(map(str, r)) for r in ranges]

仔细观察有两段代码后面有两个逗号,这个逗号很关键啊,ranges+=[],使ranges成为了[[]],而如果你不加逗号的话,ranges的结果还是[],据说这是因为逗号的的关系,[]被当成了([],)即元组来处理,要不然给[]的[1:]直接赋n的话是会报错的,还有一段代码:

def summaryRanges(self, nums):
    return [re.sub('->.*>', '->', '->'.join(`n` for i, n in g))
            for _, g in itertools.groupby(enumerate(nums), lambda (i, n): n-i)]

这个反正打死我也想不出来的。。作者巧妙的利用了数组中连续数和索引的差必定恒为定值,比如:

numbers:  [0, 1, 2, 4, 5, 7]
indexes:  [0, 1, 2, 3, 4, 5]
subtract: [0, 0, 0, 1, 1, 2]

所以来对他们进行分组,groupby函数的用法参考这个戳我 ,前面的re.sub相当于replace是用正则化来用作取代,把0->0->0转化为0->0,当然结果不是这个,只是这么个意思。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值