LeetCode46. 全排列【JAVA教程】

!
也想出现在这里? 联系我们
信息

LeetCode46. 全排列,第1张

思路

每一个回溯算法都可以用树形结构来展示。如下是代码随想录的图

 从上面的图中不难看出,每次使用一个元素后就将其在used数组中进行标记,这个不是每一层一个used数组所以不需要在for循环上面重新new数组,这个是和递增子序列不同的地方。

代码

class Solution {
    List path = new ArrayList();
    List<List> res = new ArrayList();
    public List<List> permute(int[] nums) {
        boolean[] used = new boolean[nums.length];
        fun(nums,used);
        return res;
    }
    public void fun(int[] nums,boolean[] used){
        if(path.size() == nums.length){
            res.add(new ArrayList(path));
            return;
        }
        for(int i = 0;i<nums.length;i++){
            if(used[i] == true){
                continue;
            }
            path.add(nums[i]);
            used[i] = true;
            fun(nums,used);
            path.remove(path.size()-1);
            used[i] = false;
        }
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞56 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容