欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

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

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

Python|力扣周考——顺次表

图1 运行结果

结语

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

 

END

实习编辑   |   王楠岚

责       编   |   李和龙

 where2go 团队


   

微信号:算法与编程之美          

Python|力扣周考——顺次表

长按识别二维码关注我们!

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

相关文章:

  • 2021-07-17
  • 2021-10-04
  • 2021-10-12
  • 2021-07-05
  • 2021-10-10
  • 2021-05-25
  • 2021-10-07
  • 2022-02-08
猜你喜欢
  • 2022-01-19
  • 2021-09-13
  • 2021-11-06
  • 2021-09-27
  • 2021-07-14
  • 2022-12-23
  • 2022-01-15
相关资源
相似解决方案