您的位置:首页 > 其它

Leetcode 47. Permutations II

2017-02-10 05:47 459 查看
public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
Arrays.sort(nums);

List<List<Integer>> ret = new ArrayList<>();
List<Integer> curr = new ArrayList<>();
boolean[] isVisited = new boolean[nums.length];

dfs(0, nums, curr, ret, isVisited);
return ret;
}

private static void dfs(int pos, int[] nums, List<Integer> curr, List<List<Integer>> ret, boolean[] isVisited) {
if (curr.size() == nums.length) {
ret.add(new ArrayList<>(curr));
}
for (int i=0; i<nums.length; i++) {
// simialr with duplicate combinations
if (isVisited[i] || (i!=0 && nums[i]==nums[i-1] && !isVisited[i-1])) {
continue;
}
isVisited[i] = true;
curr.add(nums[i]);
dfs(i+1, nums, curr, ret, isVisited);
isVisited[i] = false;
curr.remove(curr.size()-1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: