Problem: [47. 全排列 II](https://leetcode.cn/problems/permutations-ii/description/)
思路
不重复使用重复数字,不重复组合重复组合
解题过程
确定一个固定数字(在重复数字里),然后确保前一个没有用到,后面自然就不可能用到
Code
class Solution {
List<List<Integer>> res = new ArrayList();
boolean st[];
List<Integer> str = new ArrayList();
public List<List<Integer>> permuteUnique(int[] nums) {
// 排序
Arrays.sort(nums);
int n = nums.length;
st = new boolean[n];
dfs(0,nums);
return res;
}
void dfs(int k,int nums[]){
if(k == nums.length){
res.add(new ArrayList(str));
return;
}
for(int i = 0;i < nums.length;i++)
{
if(!st[i]){
if(i > 0 && nums[i-1] == nums[i] && !st[i-1]) continue; //固定一个重复数字,确定
str.add(nums[i]);
st[i] = true;
dfs(k+1,nums);
//回溯
st[i] = false;
str.remove(str.size() - 1);
}
}
}
}