[leetCode刷题笔记]47. Permutations II

来源:互联网 发布:八百字淘宝导购 编辑:程序博客网 时间:2024/06/07 01:41

思路是用一个Boolean array来保存每个元素用过的记录,如果用过,则跳过。

处理重复数的时候,先sort,然后如果前一个元素等于后一个元素而且前一个元素已经用过,则跳过后一个元素


public class Solution {    public List<List<Integer>> permuteUnique(int[] nums) {        List res = new  ArrayList<List<Integer>>();        if (nums == null || nums.length == 0) return res;        boolean[] used = new boolean[nums.length];        List<Integer> pre = new ArrayList<Integer>();         Arrays.sort(nums);        helper(nums, used, pre, res);        return res;            }    private void helper (int nums[], boolean[] used, List<Integer> pre, List<List<Integer>> res) {        if (pre.size() == nums.length) {            res.add(new ArrayList<Integer>(pre));            return;        }        for (int i = 0; i < nums.length; i++) {            if (used[i]) continue;            if (i > 0 && nums[i - 1] == nums[i] && !used[i - 1]) continue;             used[i]=true;            pre.add(nums[i]);            helper(nums, used, pre, res);            used[i]=false;            pre.remove(pre.size() - 1);        }        return;    }}



原创粉丝点击