publicclassE17Print1ToMax{//打印从1到最大的n位数//用字符数组解决大数问题publicstaticvoidprint1ToMaxN_Solution1(int n){//循环实现if(n <=0)return;//初始化,索引0处存放个位数char[] bits =newchar[n +1];for(int i =0; i <= n; i ++)
bits[i]='0';//当第n+1位没有进位时打印while(bits[n]=='0'){printNumber(bits, n);//将数字加1addNumber(bits, n);}}privatestaticvoidaddNumber(char[] bits,int n){for(int i =0; i <= n; i++){//避免进位时char类型越界,将该位数字保存到int类型中int number = bits[i]-'0';
number++;if(number >=10){//进位
bits[i]='0';}else{//不能进位时跳出循环
bits[i]+=1;break;}}}privatestaticvoidprintNumber(char[] bits,int n){//从第一个不为0的位开始打印
StringBuilder number =newStringBuilder();for(int i = n -1; i >=0; i--){if(bits[i]!='0'){while(i >=0){
number.append(bits[i]);
i--;}}}
System.out.print(number +"\n");}publicstaticvoidprint1ToMaxN_Solution2(int n){//递归实现,全排列if(n <=0)return;//初始化,索引0处存放个位数char[] bits =newchar[n];for(int i =0; i < n; i ++)
bits[i]='0';//排列for(int i =0; i <10; i++){
bits[n -1]=(char)(i +'0');print1ToMaxNCore(bits, n, n -2);}}privatestaticvoidprint1ToMaxNCore(char[] bits,int n,int index){//每次递归结束时打印数字if(index ==-1){printNumber(bits, n);return;}for(int i =0; i <10; i++){
bits[index]=(char)(i +'0');print1ToMaxNCore(bits, n, index -1);}}//测试用例publicstaticvoidmain(String[] args){char[] c ={'9','1','0','3','1','0','0','0',};
E17Print1ToMax.printNumber(c,8);
E17Print1ToMax.print1ToMaxN_Solution1(6);
E17Print1ToMax.print1ToMaxN_Solution2(6);}}