劍指 Offer 17 列印從1到最大的n位數

2021-10-14 09:27:06 字數 916 閱讀 1571

題目:輸入乙個位數n,把1到最大的n位數(如當n=2時,為99)放到int裡返回。

public int printnumbers(int n)

思路:1.直接用for來放入,不考慮大數問題。

//不考慮大數問題

public

int[

]printnumbers

(int n)

return array;

}

2.當n變大時,int無法儲存,所以這是乙個大數問題。可以使用遞迴dfs(int index)來生成全排列(如0-99),這樣放到char裡就可以解決大數問題。

生成全排列用char c = 每一位放到char num裡,配合遞迴dfs(0),能夠先在個位先從0到9,這樣正好符合數字遞增的規律。(所以有很多類的屬性變數)

class

solution

;private

int count =0;

private

int total =0;

//當n很大時無法處理,所以考慮大數問題(面試時說,說思路,遞迴實現全排列)

public

int[

]printnumbers

(int n)

//用遞迴來做全排列(為什麼用遞迴?因為生成一位後剩下位都是一樣生成)

//x為char的下標

public

void

dfs(

int x)

return;}

for(

char item : c)

}}

注意:返回為int型別,其實就沒有必要是考慮大數問題,由於面試時會考察大數問題,所以這個思路和這種實現方式要會。

劍指offer17 列印從1到最大的n位數

題目 輸入數字n,按順序列印從1到最大的n為十進位制數。比如輸入3,則列印出1,2,3一直到最大的3位數999。看到這個問題之後,最容易想到的辦法就是先求出最大的n位數,然後用乙個迴圈從1開始逐個列印。於是很容易寫出以下 void print1tomaxofndigits 1 int n for i...

劍指 Offer 17 列印從1到最大的n位數

輸入數字n,按順序列印出從 1 到最大的 n 位十進位制數。比如輸入 3,則列印出 1 2 3 一直到最大的 3 位數 999。示例 1 輸入 n 1 輸出 1,2,3,4,5,6,7,8,9 越來越覺得越是簡單的問題,遇到大數的時候就越難想出來處理的方式,感覺像是一種思維上的定式限制了我會用別的方...

劍指 Offer 17 列印從1到最大的n位數

劍指 offer 17.列印從1到最大的n位數 題目描述 輸入數字n,按順序列印出從 1 到最大的 n 位十進位制數。比如輸入 3,則列印出 1 2 3 一直到最大的 3 位數 999。示例 輸入 n 1 輸出 1,2,3,4,5,6,7,8,9 說明 1.用返回乙個整數列表來代替列印 2.n 為正...