17. 打印从 1 到最大的 n 位数

题目描述

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数即 999。

解题思路

由于 n 可能会非常大,因此不能直接用 int 表示数字,而是用 char 数组进行存储。

使用回溯法得到所有的数。

  1. public void print1ToMaxOfNDigits(int n) {
  2. if (n <= 0)
  3. return;
  4. char[] number = new char[n];
  5. print1ToMaxOfNDigits(number, 0);
  6. }
  7. private void print1ToMaxOfNDigits(char[] number, int digit) {
  8. if (digit == number.length) {
  9. printNumber(number);
  10. return;
  11. }
  12. for (int i = 0; i < 10; i++) {
  13. number[digit] = (char) (i + '0');
  14. print1ToMaxOfNDigits(number, digit + 1);
  15. }
  16. }
  17. private void printNumber(char[] number) {
  18. int index = 0;
  19. while (index < number.length && number[index] == '0')
  20. index++;
  21. while (index < number.length)
  22. System.out.print(number[index++]);
  23. System.out.println();
  24. }

17. 打印从 1 到最大的 n 位数 - 图1