package structure; import org.junit.Test; /*打印从1到最大的n位数*/ public class print1ToMaxOfNDigits { public void print1(int n){ if(n<=0)return; int[] a=new int[n]; System.out.print(0);//打印第一个0 for(int i=0;i<10;i++){ a[0]=i;//赋值,这个循环让为最高位赋值 print2(a,n,0);//调用print2方法,对剩余的位赋值 } } public void print2(int[] a,int len,int index){ //进行递归的方法 if(index==len-1){//递归返回的条件为最后一次赋值的位为数组的最后一个下标 printNumber(a);//数组最后一个下标赋值完成,则可以进行打印数组 return; } for(int i=0;i<10;i++){ a[index+1]=i;//为下一位进行赋值 print2(a,len,index+1);//递归调用print2方法,从而为下一位进行赋值 } } public void printNumber(int[] a){ int i=0; for(;i<a.length;i++){ if(a[i]!=0){ break;//从不为0的下标开始打印数组 } } for(int j=i;j<a.length;j++){ System.out.print(a[j]); } System.out.println(); } @Test public void test(){ print1(4); } }
该算法采用递归的方式,打印从1到最大的n位数,即利用一个大小为n的数组,采用递归的方式进行一个0-9的全排列。