剑指Offer(书):打印从1到最大的n位数

题目:输入数字N,按顺序打印出从1到最大的N位十进制数,比如输入3,则打印出1、2、3一直到999

分析:N的范围不定。所以有可能超出范围,因此用数组存放以及输出。说实话,对复杂递归还是一头雾水

public void printToMaxOfNDigits(int n){
    if(n<=0){
        return;
    }
    int[] number = new int[n];
    for(int i=0;i<10;i++){
        number[0]=i;
        printToMaxOfNDigitsRecursively(number,n,0);
    }
}

private void printToMaxOfNDigitsRecursively(int[] number, int n, int index) {
    if(index==n-1){
        printNumber(number);
        return;
    }
    for(int i=0;i<10;i++){
        number[index+1]=i;
        printToMaxOfNDigitsRecursively(number,n,index+1);
    }
}

private void printNumber(int[] number) {
    boolean isStart0 = true;
    for(int i=0;i<number.length;i++){
        if(isStart0 && number[i]!=0){
            isStart0=false;
        }
        if(!isStart0){
            System.out.print(number[i]);
        }
    }
    System.out.printf("\n");
}

 

posted @ 2018-08-07 16:14  liter7  阅读(108)  评论(0编辑  收藏  举报