打印1到最大的n位数-Java

在练习剑指offer的时候,第12题打印1到最大的n位数的时候,想找个java版的,但大家要么用BigInteger做,要么给出其他的方法。我觉得要给就给最好的方法,下面是我自己参考C++代码写的java版的全排列方法。

代码:

public class Quanpaixu {

    public static void print1ToMaxOfNDigits(int n){
        if(n<=0) {
            return;
        }
        //生成相应位数大小的数组
        int[] number = new int[n];
        digui(number, n, 0);

    }
    //第二中方法实现,全排序实现
    public static void digui(int[] number,int length,int index){
        //判断是否到数组的最后索引位置
        if(index ==length){
            PrintNumber(number);
            return;
        }
        for(int i=0;i<10;i++){
            number[index]=i;
            digui(number, length, index+1);
        }
    }

    private static void PrintNumber(int[] number) {
        //标识第一个非0的节点
        boolean touFlag = true;
        for(int i=0; i<number.length; i++) {
            if(number[i]!=0 && touFlag) {
                touFlag = false;
            }
            if(!touFlag) {
                System.out.print(number[i]);
            }
        }
        //不打印0,从1开始打印
        if(!touFlag) {
            System.out.println();
        }
    }
    //main方法测试  
    public static void main(String[] args) {
        print1ToMaxOfNDigits(3);
    }
}
posted @ 2017-08-13 14:43  傍晚的羔羊  阅读(169)  评论(0编辑  收藏  举报