题目:输入一个数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,输出1,2,3。。。。。999。
常规的想法就是求出最大的那个数,然后遍历输出。但是当n非常大的时候就无法这么做了,可以考虑数组存储。实际上是一个全排列问题。
package others;
/**
* 输入一个数字n,按顺序打印出从1到最大的n位十进制数
*
* @author duola
*
*/
public class print1ton {
private static void print1tomax(int n) {
if (n < 1) {
System.out.print("error");
return;
}
int[] arr = new int[n];
printOneToNthDigits(0,arr);
}
public static void printOneToNthDigits(int n, int[] arr) {
// 说明所有的数据排列选择已经处理完了
if (n >= arr.length) {
printArray(arr);
}
//n位数的全排列,每一位有0-9候选项
else {
for (int i = 0; i <= 9; i++) {
arr[n] = i;
printOneToNthDigits(n + 1, arr);
}
}
}
public static void printArray(int[] arr) {
// 找第一个非0的元素
int index = 0;
while (index < arr.length && arr[index] == 0) {
index++;
}
// 从第一个非0值到开始输出到最后的元素。
for (int i = index; i < arr.length; i++) {
System.out.print(arr[i]);
}
// 条件成立说明数组中有非零元素,所以需要换行
if (index < arr.length) {
System.out.println();
}
}
public static void main(String[] args) {
print1tomax(2);
}
}