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

Python|力扣周考——顺次表

作者头像
算法与编程之美
发布2019-12-24 12:21:12
3690
发布2019-12-24 12:21:12
举报

问题描述

我们定义「顺次数」为:每一位上的数字都比前一位上的数字大1的整数。请你返回由[low, high] 范围内所有顺次数组成的有序列表(从小到大排序)。

示例 1:

输出:low = 100, high = 300

输出:[123,234]

示例 2:

输出:low = 1000, high = 13000

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

解决方案

我们从提也可以看出我们需要的数字是后一位比前一位大1,我们利用这个特点,假如一个数为四位数,我们根据规律按位置顺序对其分别对其进行相减,便可以得到三个“1”,假如原数为五位数,则得到四个“1”,以此类推,将这些“1”放入一个列表中。我们根据原数的长度创建一个与理想结果长度相同的只含“1”的新列表。遍历范围内的所有数字,如果两列表相同,则这个数满足我们要求的要求,将其填入列表等待输出。

Python代码

def sequentialDigits(low, high): num_list =[] #装满足条件的数字的列表 for num in range(low,high+1): new_num = str(num) lenth = len(new_num) a = [1] *(lenth-1) #想得到的理想列表 list1 = [(int(new_num[i]) - int(new_num[i-1])) for i in range(1,lenth)]#创建列表得我们球的数字中的“1” if list1 == a : num_list.append(num) return num_list if __name__ == "__main__": print(sequentialDigits(1000,13000))#运行程序 print(sequentialDigits(100,300))

最后通过这样的比对得到我们要的列表结果:

图1 运行结果

结语

这道题的解题方法还有很多,比如还可以使用枚举法将其一一列举出来,也能够得到我们需要的结果,我们要做的是如何从总选择最简单的方法,从时间复杂度方面考虑我们的解题是否好。

END

实习编辑 | 王楠岚

责 编 | 李和龙

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

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

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

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

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