给定整数n,依次输出1,2,3,……直到n位最大整数。
比如n=2,输出应该是:1,2,3,……,98,99
这道题中如果ntebie大,则不能使用数字来表示,因为可能会溢出。因此需要使用数组来表示。
当n=2时,用数组array={0,0}来表示可能的值。则array可能的情况有{0,0},{0,1},{0,2},……,{0,9},……{9,9}
可以看出这是一个全排列问题。
数组的每一位都有10种情况{0,1,2,3,4,5,6,7,8,9}。因此我们使用递归来做全排列。
代码:
/**
* Created by wuchao on 17-3-29.
*/
import java.util.*;
public class test {
public static void main(String[] args) {
printN(3);
}
public static void printN(int n){
char[] array = new char[n];
//初始化
for(int i=0;i<n;i++){
array[i]='0';
}
for(int i=0;i<10;i++){
array[0]= (char)('0'+i);
printNRecu(array,0);
}
}
public static void printNRecu(char[] array,int index){
//最后一位已经赋值后,打印该数组
if(index==array.length-1){
printArray(array);
return;
}
//递归修改下一个元素
for(int i=0;i<10;i++){
array[index+1]=(char)('0'+i);
printNRecu(array,index+1);
}
}
//打印数组,从第一个非0开始打印,因为整数的第一位非零
public static void printArray(char[] array){
int index=0;
for(;index<array.length;index++){
if(array[index]!='0') break;
}
if(index==array.length) return;
for(int i=index;i<array.length;i++) {
System.out.print(array[i]);
}
System.out.println();
}
}