《劍指 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

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