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