class Solution {
本题是比较常规的回溯问题,其中的一个需要解决的点是如何去重,本文主要针对去重做一下讲解
List<List<Integer>> list;
List<Integer> ans;
int n;
建立一个boolean型数组,用来记录该位置的数据是否已经被使用,true表示已经被使用,false相反,以防止同一个数据被使用两次。
boolean[] flag;
public List<List<Integer>> permuteUnique(int[] nums) {
n = nums.length;
Arrays.sort(nums);
flag = new boolean[n];
list = new ArrayList<>();
ans = new ArrayList<>();
dfs(nums);
return list;
}
以下是核心递归方法
void dfs(int[] arr){
if(ans.size() == n){
list.add(new ArrayList<>(ans));
return;
}
for(int i = 0;i < n;i++){
下面这个if语句的作用是,如果数组中存在两个相同的数字,那么会出现重复组合,比如数组是[1,1&#