《剑指 offer》 学习11之打印从 1 到最大的 n 位数

题目描述

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

解题思路

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

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

代码

public class Main {
	public static void main(String[] args) {
		printOneToMaxOfNDigits(3);
	}
	
	public static void printOneToMaxOfNDigits(int n) {
        if (n <= 0){
            return;
        }
        
        char[] number = new char[n];
        printOneToMaxOfNDigits(number, 0);
    }

    public static void printOneToMaxOfNDigits(char[] number, int digit) {
        if (digit == number.length) {
            printNumber(number);
            return;
        }
        for (int i = 0; i < 10; i++) {
            number[digit] = (char) (i + '0');
            printOneToMaxOfNDigits(number, digit + 1);
        }
    }

    public static void printNumber(char[] number) {
        int index = 0;
        while (index < number.length && number[index] == '0'){
            index++;
        }
        
        while (index < number.length){
            System.out.print(number[index++]);
        }
        System.out.println();
    }
}

测试结果

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章