剑指offer 17 打印从1到最大的n位数
输入数字 n
,按顺序打印出从 1
到最大的 n
位十进制数。比如输入 3
,则打印出 1、2、3
一直到最大的 3
位数 999
。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
- 用返回一个整数列表来代替打印
n
为正整数
解题思路
题目要求打印 “从 1
至最大的 n
位数的列表” ,因此需考虑以下两个问题:
最大的 n
位数(记为 end
)和位数 n
的关系: 例如最大的 1
位数是 9
,最大的 2
位数是 99
,最大的 3
位数是 999
。则可推出公式:
e n d = 1 0 n − 1 end = 10^n - 1 end=10n−1
大数越界问题: 当 n
较大时,end
会超出int
整型的取值范围,超出取值范围的数字无法正常存储。但由于本题要求返回 int
类型数组,相当于默认所有数字都在 int
整型取值范围内,因此不考虑大数越界问题。
故只需定义区间 [ 1 , 1 0 n − 1 ] [1, 10^n - 1] [1,10n−1]和步长 1
,通过 for
循环生成结果列表res
并返回即可。
Java代码
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 < res.length; i++){
res[i] = i + 1;
}
return res;
}
}