题目描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。
大数问题——数组或者字符串,两种解决方法
遍历每一位上可能出现的情况
字符串方法
public static void print1ToMaxOfNDigits(int n){if(n<=0)return;char[] ch =new char[n];print1ToMaxOfNDigits(ch,0);//递归遍历每一位上可能的情况return;}public static void print1ToMaxOfNDigits(char[] ch,int index){if(index==ch.length){printNumber(ch);return;}for(int i=0;i<10;i++)//每一位上只可能是'0'~'9' 递归执行,先确定前一位,再递归遍历后一位的所有可能{ch[index]=(char)(i+'0');print1ToMaxOfNDigits(ch,index+1);} }public static void printNumber(char[] ch){int index=0;while(index<ch.length&&ch[index]=='0')//这里有个坑,两个条件的顺序不能颠倒,否则index已经越界,找不到ch[index]引发异常index++;if(index>=ch.length)return;while(index<ch.length){System.out.print(ch[index]);index++;}System.out.println();return;}
数组方法
public static void print1ToMaxOfNDigits(int n){if(n<=0)return;int[] result =new int[n];print1ToMaxOfNDigits(result,0);return;}public static void print1ToMaxOfNDigits(int[] result,int index){if(index==result.length){printNumber(result);return;}for(int i=0;i<10;i++)//每一位上只可能是'0'~'9' 递归执行,先确定前一位,再递归遍历后一位的所有结果{result[index]=i;print1ToMaxOfNDigits(result,index+1);} }public static void printNumber(int[] result){int index=0;while(index<result.length&&result[index]==0)index++;if(index>=result.length)return;while(index<result.length){System.out.print(result[index]);index++;}System.out.println();return;}