输入数字n,按顺序打印出从1到最大n位的十进制数字,比如输入3,打印1,2,3,4,,,一直到最大的三位数即999。
思路,这题看上去不难,但是需要注意的有两点,首先如果n位数很大,超出了int或者long表示的范围怎么办,因此我们选择把数字存放在数组里面,然后使用全排列的类似方法来求出n位数的所有可能性。第二个需要注意的是打印的时候,最前面的0是不用打印的,直到遇到第一位不是0的数我们才打印。
public static void process(int n){
int[] arr=new int[n];
if(n<=0)
return ;
process( arr, 0);
}
public static void process(int[] arr,int n){
if(n==arr.length){
print(arr);
System.out.println();
return ;
}
for(int i=0;i<10;i++){
arr[n]=i;
process(arr,n+1);
}
}
public static void print(int[] arr){
boolean isBegin0=false;//是不是开始的0
for(int i=0;i<arr.length;i++){
if(arr[i]!=0){
if(isBegin0==false) isBegin0=true;
System.out.print(arr[i]);
}
else{
if(isBegin0){
System.out.print(arr[i]);
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
process(2);
}