生成长度最多为k的子集

huangapple go评论58阅读模式
英文:

Generate subset of length upto k

问题

我已编写了能够从长度大于等于 'k' 的输入生成长度为 'k' 的子集的代码。

我无法编写能够生成长度小于等于 'k' 的所有子集的代码。

public static void pset(List<Integer> original, List<Integer> lst, int k, int idx) {
    if (lst.size() == k) {
        System.out.println(lst);
        return;
    }

    if (idx == original.size()) {
        return;
    }

    lst.add(original.get(idx));
    pset(original, lst, k, idx + 1);
    lst.remove(lst.size() - 1);
    pset(original, lst, k, idx + 1);
}

public static void main(String[] args) {
    var original = List.of(1, 2, 3, 4);
    pset(original, new ArrayList<>(), 2, 0);
}

希望这有所帮助。如果你有其他问题,请随时提出。

英文:

I have written down code that is able to generate subsets of an exact length &#39;k&#39; from an input of length&gt;&#39;k&#39;

I am unable to actually come up with code that generates all subset up-to length 'k'

public static void pset(List&lt;Integer&gt; original, List&lt;Integer&gt; lst, int k, int idx) {
    if(lst.size() == k) {
        System.out.println(lst);
        return;
    }

    if(idx == original.size()) {
        return;
    }

    lst.add(original.get(idx));
    pset(original,lst,k,idx+1);
    lst.remove(lst.size()-1);
    pset(original,lst,k,idx+1);
}

public static void main(String[] args) {
    var original = List.of(1,2,3,4);
    pset(original, new ArrayList&lt;&gt;(),2,0);
}

答案1

得分: 3

idx == original.size() 时,这意味着你通过取列表的子集达到了列表的末尾,检查取得的子集长度是否最多为 k

英文:
public static void pset(List&lt;Integer&gt; original, List&lt;Integer&gt; lst, int k, int idx) {
        if(idx ==  original.size() || lst.size() == k) {
            if (lst.size() &lt;= k)
                System.out.println(lst);
            return;
        }


        lst.add(original.get(idx));
        pset(original,lst,k,idx+1);
        lst.remove(lst.size()-1);
        pset(original,lst,k,idx+1);
}

When idx == original.size() that means you reached the end of the list by taking a subset of them, check if the taken subset length is at most k.

huangapple
  • 本文由 发表于 2023年5月22日 11:01:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/76302805.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定