47.全排列 ii java
时间: 2023-10-14 18:28:46 浏览: 84
以下是Java代码实现全排列II:
```java
import java.util.*;
public class Solution {
public List<List<Integer>> permuteUnique(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
boolean[] used = new boolean[nums.length];
Arrays.sort(nums); // 排序,方便去重
backtrack(nums, used, new ArrayList<>(), res);
return res;
}
private void backtrack(int[] nums, boolean[] used, List<Integer> path, List<List<Integer>> res) {
if (path.size() == nums.length) {
res.add(new ArrayList<>(path));
return;
}
for (int i = 0; i < nums.length; i++) {
// 如果当前数字已经被用过了,或者前一个数字和当前数字相同且前一个数字没有被用过,说明当前分支和前一个分支相同,跳过当前分支
if (used[i] || (i > 0 && nums[i] == nums[i-1] && !used[i-1])) continue;
used[i] = true;
path.add(nums[i]);
backtrack(nums, used, path, res);
path.remove(path.size() - 1);
used[i] = false;
}
}
}
```
其中,使用了回溯算法实现全排列,同时也对重复的数字进行了去重处理。
阅读全文