问题描述
我们定义「顺次数」为:每一位上的数字都比前一位上的数字大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
实习编辑 | 王楠岚
责 编 | 李和龙