對46題一個(gè)解答的解釋,希望能對其他同類型的backtracking的題目達(dá)到舉一反三
class Solution {
public List<List<Integer>> permute(int[] nums) {
//這里也可以不存int array的長度,只是后面就需要每次都自己算
int len = nums.length;
//新建一個(gè)空的二維ArrayList來存Integer的初始化方法為如下形態(tài)
//重點(diǎn)要注意尖括號里面的List不能寫成ArrayList,原因是里面為類型,并沒有實(shí)例化,所以要一致
List<List<Integer>> result = new ArrayList<List<Integer>>();
//int array to ArrayList<Integer> 可以自己手動下手,或者也可以用
//List<Integer> choose = Arrays.asList(ArrayUtils.toObject(array));
List<Integer> choose = new ArrayList<Integer>();
for (int i : nums){
choose.add(i);
}
helper(len, result, new ArrayList<Integer>(), choose);
return result;
}
//這里用void所以不需要返回值了,但是如果用了特定的類型,則即便返回null值也需要寫上 return null;
private void helper(int len, List<List<Integer>> ans, List<Integer> cur, List<Integer> choose){
if(cur.size() == len){
//假如這里不新建一個(gè)cur,之后對cur的改動會改變ans里面的cur值。所以需要新建另一個(gè)object,內(nèi)容跟cur一模一樣,但是卻是兩個(gè)object
List<Integer> temp = new ArrayList<>(cur);
ans.add(temp);
}
for(Integer ele: choose){
cur.add(ele);
List<Integer> temp = new ArrayList<>(choose);
temp.remove(ele);
helper(len, ans, cur, temp);
//為了能使迭代邏輯成立,ele需要在cur中被移出
cur.remove(ele);
}
}
}