例如:n = 3,打印从 1 ,2,3......999这么多的整数.
思路:介绍最主要的思路,主要是对边界问题的处理,当n<=0return结束。其次就是1,2,3,前面不能带有001,002,必须处理一下当char[i]!='0'即可输出。
for(int i=0;i<nlen;i++){ if(isPrint0&&len[i]!='0'){ isPrint0 = false; } if(!isPrint0){ System.out.printf("%c",len[i]); }
其次就是递归的方法打印这么多数字.
首先明白问题的解空间。即打印001,002....从i=0开始到i=9,即递归的起始就是来个for()嵌套递归。递归方法里
1.边界条件
if(index==n-1){ PrintNumber(news); return; }
2.不断递归的下一步的情况,因为每一次都需要从0-9位置,即再来for循环,
for(int i=0;i<10;++i){ news[index+1] = (char) (i+'0'); PrintToMaxOfNDiGitsRe(news,n,index+1); }
这里每次到了边界就会return,那么下一次就是从001,..002...003..个位那层进行for循环递增。当个进行递增的时候,个位全部完了,就会到10位。
代码:
void PrintNumber(char[] len){
boolean isPrint0 = true;
int nlen = len.length;
for(int i=0;i<nlen;i++){
if(isPrint0&&len[i]!='0'){
isPrint0 = false;
}
if(!isPrint0){
System.out.printf("%c",len[i]);
}
}
System.out.print("\t");
}
//第二种方法
void PrintToMax(int n){
if(n<=0){
return;
}
char[] news= new char[n+1];
for(int i=0;i<10;i++){
news[0] = (char) (i+'0');
PrintToMaxOfNDiGitsRe(news,n,0);
}
}
void PrintToMaxOfNDiGitsRe(char[] news,int n,int index){
if(index==n-1){
PrintNumber(news);
return;
}
for(int i=0;i<10;++i){
news[index+1] = (char) (i+'0');
PrintToMaxOfNDiGitsRe(news,n,index+1);
}
}
public static void main(String[] args) {
new PrintToMax().PrintToMax(3);
}