46. Permutations (DFS with recursion)

对46题一个解答的解释,希望能对其他同类型的backtracking的题目达到举一反三

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        //这里也可以不存int array的长度,只是后面就需要每次都自己算
        int len = nums.length;
        //新建一个空的二维ArrayList来存Integer的初始化方法为如下形态
        //重点要注意尖括号里面的List不能写成ArrayList,原因是里面为类型,并没有实例化,所以要一致
        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){
        //假如这里不新建一个cur,之后对cur的改动会改变ans里面的cur值。所以需要新建另一个object,内容跟cur一模一样,但是却是两个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);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容