Python|力扣-顺次数

2020-07-16 10:33:07 浏览数 (1)

问题描述

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

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

示例 1:

输出:low = 100, high = 300

输出:[123,234]

示例 2:

输出:low = 1000, high = 13000

输出:[1234,2345,3456,4567,5678,6789,12345]

解决方案

通过对题意的理解,得知此题的目的后,按以下解题步骤来解决该题。

第一步就是提取题目中的关键信息,找准解题的关键步骤。每个数字的“头”和“尾”非常重要,比如示例1中的low,他的“头”就是1,于是就可以得出第一个顺次数为123,然后再由123的“头”和“尾”可以得出下一个数。用列表表示为:list(range(head_num,tail_num)),然后为了不超过high,所以每得出一个数就要和high比较,小于它就就保留,反之则终止程序。

经过第一步后可以发现,已经能通过一些用例了,下一步就是输入的位数增大,比如示例2,程序得到6789时,如果继续运行得到的就是78910,显然不符合题目要求,所以就需要对每一个数的“尾”进行判断,如果tail_num大于9了,就让head_num=1,然后生成列表的长度也要加1,于是就会得到12345,答案就正确了。

代码示例:

代码语言:javascript复制
low,high = map(int,input().split())

def jiang(low,high):

    res = []

    l = len(str(low))

    head_num = int(str(low)[0])

    if head_num   l > 10:

        head_num = 1

        l  = 1

    res_num = int(''.join(map(str,list(range(head_num,head_num l)))))

    while res_num < high:

        res_num = int(''.join(map(str,list(range(head_num,head_num l)))))

        tail_num = int(str(res_num)[-1])

        if low<=res_num <= high:

            res.append(res_num)

        if tail_num == 9:

            l  = 1

            head_num = 0

        head_num  = 1

    return res

print(jiang(low,high))

运行结果:

结语

通过这道题可以得出,细节对于解题思路及方法是至关重要的。有时候题目本身并不难,难的是理解题目。

0 人点赞