剑指Offer(Java版)第十五题:打印1到最大的n位数

/*
打印1到最大的n位数
*/
//一开始想到的是直接构造出最大数,然后逆序输出,把‘0’排除在外即可。看了一些网上的博客,要注意大叔情况,因此使用以下方法。
public class Class15 {

public void printNumber(int n){
if(n <= 0){
return;
}
char[] number = new char[n];
for(int i = 0; i < 10; i++){
number[0] = (char)(i + '0');
printNumberMain(number, n, 0);
}
}
//index表示判断是否打印的条件,如果与输入的指示相同则输出。
//使用递归的方式来进行操作
public void printNumberMain(char[] number, int length, int index){
if(index == length - 1){
print(number);
return;
}
for(int i = 0; i < 10; i++){
number[index + 1] = (char)(i + '0');
printNumberMain(number,length,index + 1);
}
}
//这里是关键,判断是否打印单个的'0'
public void print(char[] number){
boolean isBegin0 = true;
int length = number.length;
for(int i = 0; i < length; i++){
if(isBegin0 && number[i] != '0'){
isBegin0 = false;
}
if(!isBegin0){
System.out.print(number[i]);
}
}
if(!isBegin0){
System.out.println();
}
}

public void test(int n){
printNumber(n);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
Class15 c= new Class15();
c.test(2);
}

}

原文地址:https://www.cnblogs.com/zhuozige/p/12450436.html