注意!需考慮大數數組
字符數組轉換爲int類型:this
字符數組--字符串(String)--int ----s = String.valueOf(num)----Integer.parseInt(s)
用遞歸表示多層for:具體spa
void def(int n){ if(){ ... return; } for(xxx){ def();在for循環中調用本身 } }
去零。全排列的結果沒法避免地會出現[001,002,003...]而不是題目所須要的[1,2,3,...,999]code
輸入n | 此時的數 | 此時該數的位數 | subString(start)中的start | 9的個數nine |
---|---|---|---|---|
2 | 09 | 1 | 1 | 1 |
3 | 009 | 1 | 2 | 1 |
3 | 099 | 2 | 1 | 2 |
獲得結論:遞歸
n = start + nine
,所以在知足以上條件時,須要擴大子字符串的範圍,即start--。字符串
public class Solution { char[] arr = {'0','1','2','3','4','5','6','7','8','9'}; int n; int[] res; char[] num; int nine,start, k =0; public int[] printNumbers(int n){ this.n = n; res = new int[(int) Math.pow(10,n)-1]; num = new char[n]; start = n-1; def(0); return res; } public void def(int x){ if (x == n){ String s = String.valueOf(num).substring(start); if(s.equals("0")) return; res[k] = Integer.parseInt(s); k++; if (n-start == nine) start--; return; } for (char a : arr) { if (a=='9') nine++; num[x] = a; def(x+1); } nine--; } }
d25string