面试题17 打印从1到最大的n位数(Python3)

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

说明:

用返回一个整数列表来代替打印
n 为正整数

这个题看起来好像很简单

 

思路

对于给定的正整数n,最大的n位十进制数恰好是10^(n)-1;然后再返回即可。

又因为range(a,b)返回[a,b-1],所以只需要通过range(1,10^(n))即可得到最终结果。

代码

class Solution:
    def printNumbers(self, n: int) -> List[int]:
        max_number = (10**n) 
        return [i for i in range(1,max_number)]

空间复杂度O(1);( 列表作为返回结果,不计入额外空间)

时间复杂度O(10^n);

 

 

结果

测试通过,看来确实不难

 

总结

1. Python生成列表的方法。除[i for i in range(a,b)]外还可以list(range(a,b));

2. Python幂运算。

3. 事实上,这道题考察的应该是大数越界时的打印。但今天还有别的事,而且本题无须考虑,所以下次遇到再说吧

当 nn 较大时,[10^(n)-1]会超出 int32整型的取值范围,超出取值范围的数字无法正常存储。但由于本题已说明"用返回一个整数列表来代替打印",相当于默认所有数字都在 int32 整型取值范围内,因此不考虑大数越界问题。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章