1.题目描述
2.解题思路
解题思路:
题目要求打印 “从 1 至最大的 n 位数的列表” ,因此需考虑以下两个问题:
1.最大的 n 位数(记为 end )和位数 n 的关系: 例如最大的 1 位数是 9 ,最大的 2 位数是 99 ,最大的 3 位数是 999 。则可推出公式:
end = 10^n - 1
2.大数越界问题: 当 n 较大时,end 会超出 int32 整型的取值范围,超出取值范围的数字无法正常存储。但由于本题要求返回 int 类型数组,相当于默认所有数字都在 int32 整型取值范围内,因此不考虑大数越界问题。
因此,只需定义区间 [1, 10^n - 1]和步长 1 ,通过 for 循环生成结果列表 res 并返回即可。
复杂度分析:
时间复杂度 O(10^n) : 生成长度为 10^n的列表需使用 O(10^n)时间。
空间复杂度 O(1) : 建立列表需使用 O(1) 大小的额外空间( 列表作为返回结果,不计入额外空间 )。
3.代码实现
class Solution {
public int[] printNumbers(int n) {
int end = (int)Math.pow(10, n) - 1;
int[] res = new int[end];
for(int i = 0; i < end; i++)
res[i] = i + 1;
return res;
}
}