题目:
输入数字 n 按顺序打印出从 1 到最大的 n 位十进制数, 比如输入 3,则打印出 1 、2、3、 …..一直到 999。
实现
// coding = java
public class Solution12 {
public static void printOneToNDigits(int n) {
// 输入的数字不能为小于1
if (n < 1) {
throw new RuntimeException("非法输入,n应大于0");
}
// 创建一个数组用于存放 打印值
int[] num = new int[n];
printOneToN(0, num);
}
/**
* @param n 当前处理的是第 n 个元素,从0开始计数
*/
public static void printOneToN(int n, int[] arr) {
// 说明所有的数据排列选择已经处理完了
if (n >= arr.length) {
printArray(arr);
} else {
for (int i = 0; i <= 9; i++) {
arr[n] = i;
printOneToN(n + 1, arr);
}
}
}
/**
*从左到右,从第一个非0值开始输出到最后一位元素。
* @param arr 要输出的数组
*/
public static void printArray(int[] arr) {
// 找第一个非0的元素
int index = 0;
while (index < arr.length && arr[index] == 0) {
index++;
}
//若数组全为0 直接返回
if(index == arr.length){
return;
}
// 从第一个非0值 开始输出 到最后的元素
for (int i = index; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.println();
}
public static void main(String[] args) {
printOneToNDigits(2);
}
}