题目:输入一个int型数字n,输出从1到最长为n位的全部数字。
代码参考了何海涛博客的代码。
主要点是,考虑数字超出了int型的最大表示范围该怎么办。这里不能直接用int型来表示。而是改用char数组,每一个char表示一位数字。
package yuesef;
public class TT {
public static void main(String ss[]) {
Print1ToMaxOfNDigits_3(3);
}
// 输出从1到长度为n的最大整数
static void Print1ToMaxOfNDigits_3(int n) {
// 0 or minus numbers are invalid input
if (n <= 0)
return;
char[] number = new char[n];
for (int i = 0; i < 10; ++i) {
// first digit can be 0 to 9
number[0] = (char) (i + 48); // 加48表示将int型的0-9转化为char
Print1ToMaxOfNDigitsRecursively(number, n, 0);// number数组,数字总长度,当前处理的下标
}
}
static void Print1ToMaxOfNDigitsRecursively(char[] number, int length,
int index) {
// 如果到达了要输出的数字长度,则输出数字
if (index == length - 1) {
PrintNumber(number);
return;
}
for (int i = 0; i < 10; ++i) {
// 当前下标的下一个数字,可能是从0-9
number[index + 1] = (char) (i + 48);
// 递归输出下一个数字
Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
}
}
static void PrintNumber(char[] number) {
boolean isBeginning0 = true;
for (int i = 0; i < number.length; ++i) {
if (isBeginning0 && number[i] != '0')
isBeginning0 = false;
if (!isBeginning0) {
System.out.print(number[i]);
}
}
System.out.println();
}
}
PrintNumber函数去掉了char数组中的前导0。