题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。
很容易就能写一个这样简单的代码
static void solution(int n) { int number=1; int i=0; while(i++<n) { number *= 10; } for(i=1; i<number; i++) { System.out.println(i); }
}
求出最大值是多少,然后依次输出比它小的所有数就行。这样的问题在于万一n很大,导致最大的数比int的范围大就会出错了。
我使用的是建立一个n大小的int数组,使用数组来表示一个大数。
static Boolean solution(int n){ if(n <= 0){ return false; } int[] result = new int[n]; int[] finallyResult = new int[n]; Arrays.fill(result,0); Arrays.fill(finallyResult,9); //如果达到[9,9,9,9...]就是到最后的结果了 while (!Arrays.equals(result,finallyResult)){ //模拟加1 Increment(result,result.length); //打印数字 print(result); } return false; }
其中还建立了一个所有元素都是9的数组,用作当边界。
static void Increment(int[]result, int lastSub){ lastSub--; if(result[lastSub] == 9 ){ //进位计算 result[lastSub] = 0; Increment(result, lastSub); }else{ result[lastSub]++; } }
这是进行加1操作的函数,如果将要加1的元素为9就代表这需要进位,这里使用递归解决。
static void print(int[]result){ //TAG是否打印0的标志 int TAG = 0; //第一个不是0的数字之前的0都不打印 for(int i = 0; i < result.length; i++){ if(result[i] != 0){ TAG = 1; } if(TAG == 0 && result[i] == 0){ continue; } System.out.print(result[i]); } System.out.println(); }
这是用于输出的函数。