import java.util.*;
public class Solution {
public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
boolean[] visited = new boolean[num.length];
Arrays.sort(num);
dfs(res, num, new ArrayList<>(), visited);
return res;
}
private void dfs(ArrayList<ArrayList<Integer>> res, int[] num, ArrayList<Integer> list, boolean[] visited){
if (list.size() == num.length){
res.add(new ArrayList<>(list));
return;
}
for (int i = 0; i < num.length; i++){
if (visited[i]) continue;
if (i > 0 && num[i] == num[i - 1] && visited[i - 1]) continue;
visited[i] = true;
list.add(num[i]);
dfs(res, num, list, visited);
visited[i] = false;
list.remove(list.size() - 1);
}
}
}
牛客网:NC42 有重复项数字的全排列
于 2022-08-01 12:51:39 首次发布
该博客详细介绍了如何使用Java实现整数数组的全排列,并去除重复的排列组合。通过深度优先搜索(DFS)策略,结合排序和标记已访问元素的方法,有效地解决了排列问题。

5171

被折叠的 条评论
为什么被折叠?



