题目:输入数字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); } }