全排列II——leetcode47(DFS)

全排列II

题目:全排列 II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例:

输入:nums = [1,1,2]
输出:
[[1,1,2],
 [1,2,1],
 [2,1,1]]

题解:DFS

class Solution {
    public void dfs(int[] nums, List<List<Integer>> results, List<Integer> p, int[] book) {
        if(p.size()==nums.length) {
            results.add(new ArrayList<>(p));
            return;
        }

        for(int i=0;i<nums.length; i++) {
            if(book[i]==1 || ((i>0 && nums[i]==nums[i-1] && book[i-1]==0))) {
                continue;
            }
            book[i]=1;
            p.add(nums[i]);
            dfs(nums, results, p, book);
            p.remove(p.size()-1);
            book[i]=0;
        }
    }
    public List<List<Integer>> permuteUnique(int[] nums) {
        List<List<Integer>> results=new ArrayList<>();
        int[] book=new int[nums.length];
        dfs(nums, results, new ArrayList<>(), book);

        return results;
    }
}

 

posted @ 2022-01-09 18:34  言思宁  阅读(23)  评论(0编辑  收藏  举报