leetcode-Permutations II

Permutations II

問題描述:給定一個可能包含重複數的集合,返回所有唯一的permutations。
比如,
[1,1,2]有如下唯一的permutations:

[
  [1,1,2],
  [1,2,1],
  [2,1,1]
]

問題解決:

public class PermutationTwo
{
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> res=new ArrayList<>();
        List<Integer> temp=new ArrayList<>();
        int len=nums.length;
        boolean[] used=new boolean[len];
        backtrace(res,temp,nums,used);
        return res;
    }

    public void backtrace(List<List<Integer>> res,List<Integer> temp,int[] nums,boolean[] used)
    {
        if(temp.size()==nums.length) {
            res.add(new ArrayList<>(temp));
        } else {
            for(int i=0;i<nums.length;i++)
            {
                if(used[i]) continue;
                if(i>0 && nums[i]==nums[i-1] && !used[i-1]) continue;
                temp.add(nums[i]);
                used[i]=true;
                backtrace(res, temp, nums, used);
                used[i]=false;
                temp.remove(temp.size() - 1);
            }
        }
    }

    public static void main(String[] args)
    {
        int[] nums={1,1,2};
        List<List<Integer>> res=new PermutationTwo().permuteUnique(nums);
        System.out.println(res.size());
        for(List<Integer> list:res)
            System.out.println(list);
    }
}

採用dfs來遍歷整個序列,並找出滿足條件的結果集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章