题目来自LeetCode,链接:面试题17. 打印从1到最大的n位数。具体描述为:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
这道题还是比较容易的,先得到最大的n位数是多少,也就是 1 0 n + 1 − 1 10^{n+1}-1 10n+1−1,比如n为3的时候就是999,然后从1遍历到这个数加入列表即可。时间复杂度为 O ( 1 0 n + 1 ) O(10^{n+1}) O(10n+1),空间复杂度为 O ( 1 ) O(1) O(1)。
JAVA版代码如下:
class Solution {
public int[] printNumbers(int n) {
int maxNum = 0;
for (int i = 0; i < n; ++i) {
maxNum = maxNum * 10 + 9;
}
int[] result = new int[maxNum];
for (int i = 1; i <= maxNum; ++i) {
result[i - 1] = i;
}
return result;
}
}
提交结果如下:
Python版代码如下:
class Solution:
def printNumbers(self, n: int) -> List[int]:
maxNum = 0
for i in range(n):
maxNum = maxNum * 10 + 9
return [i for i in range(1, maxNum + 1)]
提交结果如下: