打印1到最大的n位数

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

思路:如果我们在数字前面补0的话,就会发现n位所有十进制数其实就是n个从0到9的全排列。也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的十进制数。只是我们在打印的时候,数字排在前面的0我们不打印出来罢了。

  全排列用递归很容易表达,数字的每一位都可能是0-9中的一个数,然后设置下一位。递归结束的条件是我们已经设置了数字的最后一位。

  

public class Number{
    public void getNumber(int n){
        if(n<0) return ;
        StringBuffer s = new StringBuffer(n);
        for(int i=0;i<n;i++){
            s.append('0');
        }
        for(int i=0;i<10;i++){
            s.setCharAt(0,(char)(i+'0'));
            getNumberRecursive(s,n,0);
        }
    }
    public void getNumberRecursive(StringBuffer s,int n,int index){
        if(index == n-1){
            printNumber(s);
            return;
        }
        for(int i=0;i<10;i++){
            s.setCharAt(index+1,(char)(i+'0'));
            getNumberRecursive(s,n,index+1);
        }
    }
    public void printNumber(StringBuffer s){
        boolean isBeginning0 = true;
        for(int i=0;i<s.length();i++){
            if(isBeginning0 && (s.charAt(i)!='0')){
                isBeginning0 = false;
            }
            if(!isBeginning0){
                System.out.println(s.charAt(i));
            }
        }
        System.out.println();
    }

    public static void main(String[] args){
        Number n = new Number();
        int m = 3;
        n.getNumber(3);
    }
}
原文地址:https://www.cnblogs.com/yingpu/p/9236952.html