在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
//另一种想法

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution
{
private:
	void RecGenerateSubsets(vector<vector<int>> &res, vector<int> &curSet, vector<int> &nums, int startIdx)
	{
		if (startIdx >= (int)nums.size()) return;

		int lastNum = nums[startIdx];
		curSet.push_back(lastNum);
		res.push_back(curSet);
		RecGenerateSubsets(res, curSet, nums, startIdx + 1);
		curSet.pop_back();
		for (size_t i = startIdx + 1; i < nums.size(); ++i)
		{
			if (lastNum == nums[i]) continue;
			else
			{
				lastNum = nums[i];
				curSet.push_back(lastNum);
				res.push_back(curSet);
				RecGenerateSubsets(res, curSet, nums, i + 1);
				curSet.pop_back();
			}
		}
	}
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums)
	{
		vector<vector<int>> res;

		if (nums.size() == 0) return res;

		sort(nums.begin(), nums.end());

		vector<int> curSet{};
		res.push_back(curSet);
		RecGenerateSubsets(res, curSet, nums, 0);

		return res;
    }
};

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

class Solution {
public:
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        if(candidates.empty()){return res;}
        dfs(0,0,candidates,target);
        return res;
    }
    
    void dfs(int index,int sum,vector<int>& candidates,int target){
        if(sum==target){
            res.push_back(item);
            return;
        }
        else{
            for(int i=index;i<candidates.size();i++){
                if(i>index&&candidates[i]==candidates[i-1]){continue;}
                if(sum+candidates[i]<=target){
                    item.push_back(candidates[i]);
                    dfs(i+1,sum+candidates[i],candidates,target);
                    item.pop_back();
                }
                
            }
        }
    }
private:
    vector<vector<int>> res;
    vector<int> item;
};
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐