題目:輸入乙個位數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 為正...