剑指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
e
n
d
=
1
0
n
−
1
大数越界问题:
当
n
较大时,
end
会超出
int
整型的取值范围,超出取值范围的数字无法正常存储。但由于本题要求返回
int
类型数组,相当于默认所有数字都在
int
整型取值范围内,因此不考虑大数越界问题。
故只需定义区间
[
1
,
1
0
n
−
1
]
[1, 10^n – 1]
[
1
,
1
0
n
−
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;
}
}