打印1到最大的n位数

来源:互联网 发布:多玩wow数据库 编辑:程序博客网 时间:2024/06/05 00:16

题目:输入一个数字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);    }}
1 0
原创粉丝点击