【Leetcode 滑动窗口】顺次数(1291)

题目

我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 1 的整数。

请你返回由 [low, high] 范围内所有顺次数组成的 有序 列表(从小到大排序)。

示例 1:

输出:low = 100, high = 300
输出:[123,234]

示例 2:

输出:low = 1000, high = 13000
输出:[1234,2345,3456,4567,5678,6789,12345]

提示:

10 <= low <= high <= 10^9

解答

作为一个拥有聪明才智的程序员,最重要的是迅速抽象问题、拆解问题的能力。经过一段时间的思考,我的大脑里还是没有思路。。

没主意了,那就用爆破吧!经过长达几十分钟的修修改改,终于,我放弃了。直到在评论区看到下面这句话:
123456789,按始末数字长度滑窗判断。

我嘞个妈呀,滑动窗口,三分钟写完,low和hight的长度为常数,复杂度都是O(1)

通过代码如下:

class Solution:
    # Time: O(1), Space: O(1)
    def sequentialDigits(self, low, high):
        ans = []
        min, max = len(str(low)), len(str(high))
        s = '123456789'

        while min <= max:  # 窗口大小
            for i in range(9-min+1):  # 防止越界
                temp = int(s[i:i+min])
                if temp >= low and temp <= high:
                    ans.append(temp)
            min += 1
        return ans
原文地址:https://www.cnblogs.com/ldy-miss/p/12069383.html