题解 | #有重复项数字的全排列#
有重复项数字的全排列
https://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型一维数组
* @return int整型ArrayList<ArrayList<>>
*/
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
int[] used = null;
public ArrayList<ArrayList<Integer>> permuteUnique (int[] num) {
// write code here
ArrayList<Integer> path = new ArrayList<>();
used = new int[num.length];
Arrays.sort(num);
dfs(num,path,0);
return list;
}
public void dfs(int[] num,ArrayList<Integer> path,int index){
if(index == num.length){
list.add(new ArrayList<>(path));
}
for(int i=0;i<num.length;i++){
//剪枝,如果前一个元素与当前元素相同,且前一个元素未被使用
if(i>0&&num[i]==num[i-1]&&used[i-1]==0) continue;
if(used[i]==1) continue;
used[i] = 1;
path.add(num[i]);
dfs(num,path,index+1);
path.remove(path.size()-1);
used[i] = 0;
}
}
}
