首页 > 其他 > 详细

78. 子集

时间:2021-03-31 14:15:52      阅读:34      评论:0      收藏:0      [点我收藏+]

难度: medium
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums 中的所有元素 互不相同

解题思路:有递归解法和非递归解法,非递归解法就是在一个二维数组里面,在已添加的一维数组都添加一个当前遍历到的nums[i],然后再继续添加到res的尾部,也就是这样的一个增长过程,以nums = [1,2,3]为例:[[]], [[], [1]], [[], [1], [2], [1, 2]]。这是三个月前提交的cpp解法。
代码 t49 s26 java

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        vector<vector<int>> res(1);
        for(int i=0; i<nums.size(); i++){
            int sz = res.size();
            for(int j=0; j<sz; j++){
                res.push_back(res[j]);
                res.back().push_back(nums[i]);
            }
        }
        return res;
    }
};

还有今天提交的java解法

代码 t82 s24 java

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        int len = nums.length;
        if(len==0) return res;
        res.add(new ArrayList<>());
        for(int i=0; i<len; i++){
            int sz = res.size();
            for(int j=0; j<sz; j++){
                List<Integer> temp = new ArrayList(res.get(j));
                temp.add(nums[i]);
                res.add(temp);
            }
        }
        return res;
    }
}

解题思路:下面这个解法是递归的写法,也是来自grandyang

代码 t100 s30 cpp

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<vector<int>> res;
        vector<int> out;
        helper(res, out, nums, 0);
        return res;
    }
    void helper(vector<vector<int>>& res, vector<int>& out, vector<int>& nums, int pos){
        res.push_back(out);
        for(int i=pos; i<nums.size(); i++){
            out.push_back(nums[i]);
            helper(res, out, nums, i+1);
            out.pop_back();
        }
    }
};

java递归解法没写出来,后面补上吧。

参考资料
https://www.cnblogs.com/grandyang/p/4309345.html

78. 子集

原文:https://www.cnblogs.com/zhengxch/p/14600949.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!