N个元素集合的M子集问题

一、问题描述

一根有n个元素的集合,求该集合所有m个元素的子集


二、解法

1、递归模式

每个元素要么在子集,要么不在。

/**
* nums 集合
* m 子集大小
* idx 标记集合的第idx号元素是否进行了选择
* rst 结果集
* item 临时集
*/
private void select(int[] nums, int m, int idx, Set> rst, List item) {
        if (idx <= nums.length) {
            item.add(nums[idx - 1]);


            if (item.size() == m) {
                rst.add(new ArrayList(item));


            } else {
                select(nums, m, idx + 1, rst, item);
            }


            item.remove(item.size() - 1);
            select(nums, m, idx + 1, rst, item);
        }
}
public Set> solution(int[] nums, int m) {
    Set> rst = new HashSet>();
    List item = new ArrayList();
    select(nums, m, 1, rst, item);
    return rst;
}

你可能感兴趣的:(N个元素集合的M子集问题)