参考自:《剑指Offer——名企面试官精讲典型编程题》
题目:打印1到最大的n位数 输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
主要思路:1到最大的n位数其实就是n个从0到9的全排列,把数字的每一位从0到9排列一遍就得到所有的数,总数目为 1 0 n 10^n 10n。可以使用递归实现全排列。
关键点:递归
时间复杂度:O( 1 0 n 10^n 10n)
public class PrintOneToMaxOfNDigits { public static void main(String[] args) { int n = 3; print1ToMaxOfnDigits(n); } private static void print1ToMaxOfnDigits(int n) { if (n <= 0) { return; } char[] numbers = new char[n]; for (int i = 0; i < 10; ++i) { numbers[0] = (char) (i + '0'); printByRecursively(numbers, 0); } } private static void printByRecursively(char[] numbers, int index) { if (index == numbers.length - 1) { // 递归到数字长度为n,则打印结果 printNumber(numbers); return; } for (int i = 0; i < 10; ++i) { numbers[index + 1] = (char) (i + '0'); printByRecursively(numbers, index + 1); } } private static void printNumber(char[] numbers) { boolean isBeginWithZero = true; for (char number : numbers) { // 忽略开头的0 if (isBeginWithZero && number != '0') { isBeginWithZero = false; } if (!isBeginWithZero) { System.out.print(number); } } System.out.println(); } }