题目
面试题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 为正整数
解题思路
n
其实是要打印出的数字的最大值+1
的数中所含0
的个数,即假设n = 3
,那么要打印的最大数为999
,而999 + 1 = 1000
则含有3
个0
;- 我们总是将最高位置为
1
,而后边的数则全为0
,从而得到一个字符串stringBuilder
,将其转换为int
类型; - 接上一步得到的
int
类型数值-1
则为最后要返回的数组的大小; - 然后将
1
到最大的n
位数存放在数组中即可;
实现
package math;
import java.util.Arrays;
/**
* Created with IntelliJ IDEA.
* Version : 1.0
* Author : 村雨遥
* Email : cunyu1024@foxmail.com
* Website : https://cunyu1943.github.io
* 公众号 : 村雨遥
* Date : 2020/4/6 11:31
* Project : LeetCode
* Package : math
* Class : Seventeen
* Desc : 面试题17. 打印从1到最大的n位数
*/
public class Seventeen {
public static void main(String[] args) throws Exception {
Seventeen seventeen = new Seventeen();
int n = 1;
System.out.println(Arrays.toString(seventeen.printNumbers(n)));
}
/**
* 打印从1到最大的n位数
* @param n
* @return 从1到最大的n位数组成的数组
*/
public int[] printNumbers(int n) {
StringBuilder stringBuilder = new StringBuilder("1");
for (int i = 0; i < n; i++) {
stringBuilder.append("0");
}
int size = Integer.parseInt(stringBuilder.toString()) - 1;
int[] resultArr = new int[size];
for (int i = 0; i < size; i++) {
resultArr[i] = i + 1;
}
return resultArr;
}
}