51,408
社区成员
发帖
与我相关
我的任务
分享import java.util.ArrayList;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
// 生成样例个数
int m = 6;
List<Integer> list = new ArrayList<>();
for (int i = 0; i < m; i++) {
list.add(i);
}
List<List<Integer>> res = new ArrayList<>();
List<Integer> curr = new ArrayList<>();
// 每组个数
int n = 5;
dfs(res, n, 0, curr, list);
res.forEach(System.out::println);
}
/**
* dfs算法
*
* @param res 结果
* @param n 每组个数
* @param index 索引
* @param curr 当前集合
* @param nums 样例数组
*/
private static void dfs(List<List<Integer>> res, int n, int index, List<Integer> curr, List<Integer> nums) {
if (curr.size() == n) {
res.add(new ArrayList<>(curr));
return;
}
for (int i = index; i < nums.size(); i++) {
curr.add(nums.get(i));
dfs(res, n, i + 1, curr, nums);
curr.remove(curr.get(curr.size() - 1));
}
}
}
输出结果
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 5]
[0, 1, 2, 4, 5]
[0, 1, 3, 4, 5]
[0, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
注:跑48中挑5个的组合数,C(48,5) == 1712304
with tab1 as (select level - 1 ll from dual connect by level <= 48)
select *
from tab1 t1, tab1 t2, tab1 t3, tab1 t4, tab1 t5
where t1.ll > t2.ll
and t2.ll > t3.ll
and t3.ll > t4.ll
and t4.ll > t5.ll;