一、问题描述
一根有n个元素的集合,求该集合所有m个元素的子集
二、解法
1、递归模式
每个元素要么在子集,要么不在。
/**
* nums 集合
* m 子集大小
* idx 标记集合的第idx号元素是否进行了选择
* rst 结果集
* item 临时集
*/
private void select(int[] nums, int m, int idx, Set<List<Integer>> rst, List<Integer> item) {
if (idx <= nums.length) {
item.add(nums[idx - 1]);
if (item.size() == m) {
rst.add(new ArrayList<Integer>(item));
} else {
select(nums, m, idx + 1, rst, item);
}
item.remove(item.size() - 1);
select(nums, m, idx + 1, rst, item);
}
}
public Set<List<Integer>> solution(int[] nums, int m) {
Set<List<Integer>> rst = new HashSet<List<Integer>>();
List<Integer> item = new ArrayList<Integer>();
select(nums, m, 1, rst, item);
return rst;
}