【DFS】LeetCode 46. 全排列

题目链接

46. 全排列

思路

本题是求排列问题.与组合问题不同的是,在排列问题中,不同的数字顺序被视为不同的排列,比如 [1,2][2,1] 是两种不同的排列。

搜索树如下图所示,引用自代码随想录

image

在组合问题的 dfs 算法上进行一点小修改即可,参考【DFS】LeetCode 78. 子集的代码,将 for 的初始化由 i = index 改为 i = 0

代码

class Solution {
    private List<List<Integer>> result = new ArrayList<>();
    private Deque<Integer> path = new ArrayDeque<>();
    private boolean[] used;

    public List<List<Integer>> permute(int[] nums) {
        used = new boolean[nums.length];

        dfs(nums);

        return result;
    }

    void dfs(int[] nums){
        if(path.size() == nums.length){
            result.add(new ArrayList<>(path));
            return;
        }

        for(int i = 0; i < nums.length; i++){
            if(!used[i]){
                path.addLast(nums[i]);
                used[i] = true;
                dfs(nums);
                used[i] = false;
                path.removeLast();
            }
        }
    }
}
posted @ 2023-03-06 13:20  Frodo1124  阅读(25)  评论(0编辑  收藏  举报