46. Permutations (DFS with recursion)

對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);
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容