[leetcode] 78. 子集

Posted ACBingo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 78. 子集相关的知识,希望对你有一定的参考价值。

78. 子集

77. 组合几乎一样,我们只需将代码稍微改一下即可:

  1. k是需要变动的了,从1~n。我们在dfs外层加个循环枚举k即可
  2. 取数集合不再是从数字[1,n]取了,需要从集合nums总选取一个数来(其实道理是一样的,我们换成坐标即可,也就是[nums[0],nums[1]...nums[n]])
class Solution {

    private void dfs(int n, int k, int last, int[] nums, List<Integer> cur, List<List<Integer>> ans) {
        if (k == 0) {
            ans.add(new ArrayList<>(cur));
            return;
        }
        for (Integer i = last + 1; i <= n; i++) {
            cur.add(nums[i - 1]);
            dfs(n, k - 1, i, nums, cur, ans);
            cur.remove(((Integer) nums[i - 1]));
        }
    }

    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();

        List<Integer> cur = new ArrayList<>();

        for (int k = 0; k <= nums.length; k++) {
            dfs(nums.length, k, 0, nums, cur, ans);
        }

        return ans;
    }
}

以上是关于[leetcode] 78. 子集的主要内容,如果未能解决你的问题,请参考以下文章

精选力扣500题 第61题 LeetCode 78. 子集c++/java详细题解

leetcode78 子集(Medium)

LeetCode:78. 子集90. 子集 II

[LeetCode] 78. 子集

Leetcode 78.子集

leetcode 78. 子集