前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|力扣-顺次数

Python|力扣-顺次数

作者头像
算法与编程之美
发布2020-07-16 10:33:07
6100
发布2020-07-16 10:33:07
举报
文章被收录于专栏:算法与编程之美

问题描述

定义「顺次数」为:每一位上的数字都比前一位上的数字大 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))

运行结果:

结语

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档