class Solution {
/**
* @param nums: A list of integers.
* @return: A list of unique permutations.
*/
public ArrayList<ArrayList<Integer>> permuteUnique(ArrayList<Integer> nums) {
// 2015-08-28
// nums可以含重复元,每个元素只能使用一次
// 解集中不可以有重复的解
ArrayList<ArrayList<Integer>> rst = new ArrayList<>();
if (nums == null || nums.size() == 0) {
return rst;
}
Collections.sort(nums);
ArrayList<Integer> list = new ArrayList<>();
// 关键:加了一个数组,用它来记录哪个元素已经用过了
int[] visited = new int[nums.size()];
helper(nums, rst, list, visited);
return rst;
}
private void helper(ArrayList<Integer> nums, ArrayList<ArrayList<Integer>> rst,
ArrayList<Integer> list, int[] visited) {
if (list.size() == nums.size()) {
rst.add(new ArrayList<Integer>(list));
return;
}
for (int i = 0; i < nums.size(); i++) {
// 避免重复的解
if (i != 0 && nums.get(i - 1) == nums.get(i) && visited[i - 1] == 0) {
continue;
}
// 确保不会重复使用同一个元素
if (visited[i] == 1) {
continue;
}
visited[i] = 1;
list.add(nums.get(i));
helper(nums, rst, list, visited);
visited[i] = 0;
list.remove(list.size() - 1);
}
return;
}
}
[刷题]Permutations II
最新推荐文章于 2024-04-04 19:23:32 发布