// 排列,需先对nums排序
private void dfs4permute(int[] nums, List<List<Integer>> result, List<Integer> temp, int start, boolean[] used) {
if (start == nums.length) {
result.add(new ArrayList<>(temp));
return;
}
for (int i = 0; i < nums.length; i++) {
if (used[i] || (i > 0 && !used[i - 1] && nums[i] == nums[i - 1])) {
continue;
}
used[i] = true;
temp.add(nums[i]);
dfs4permute(nums, result, temp, start + 1, used);
temp.remove(temp.size() - 1);
used[i] = false;
}
}
// 组合
private void dfs4combine(int n, int k, List<List<Integer>> result, List<Integer> temp, int start) {
if (temp.size() + (n - start + 1) < k) {
return;
}
if (temp.size() == k) {
result.add(new ArrayList<>(temp));
return;
}
for (int i = start; i <= n; i ++) {
temp.add(i);
dfs4combine(n, k, result, temp, i + 1);
temp.remove(temp.size() - 1);
}
}
// 子集,需先对nums排序
private void dfs4subsets(int[] nums, List<List<Integer>> result, List<Integer> temp, int start) {
result.add(new ArrayList<>(temp));
for (int i = start; i < nums.length; i ++) {
if (i > start && nums[i] == nums[i - 1]) {
continue;
}
temp.add(nums[i]);
dfs4subsets(nums, result, temp, i + 1);
temp.remove(temp.size() - 1);
}
}
排列,组合,子集模板
最新推荐文章于 2025-12-19 20:15:38 发布
897

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



