leetcode 77、78 - 一个找组合 一个找子集,其实是同一类题目

博客指出77题要求两个数的可能组合,而78题要求0至n可数的所有可能组合,是题目对解的表述方式有变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

77: 

class Solution {
public:
    vector<vector<int>> combine(int n, int k) {
        vector<vector<int> > result;
        vector<int> res;
        vector<int> str;
        getCombine(result, res,1, k, n);
        return result;
    }
    void getCombine(vector<vector<int> >& result, vector<int>& res, int l, int k, int n){
    	// 若缓存的字符中。字符个数足够,则添加到解集中
    	if(res.size() == k){
    		result.push_back(res);
    		return ;
    	}else{
    		// 考虑每个数都能作为放置在第一位的起始值, 且 其后每一位只能在该值之后取
    		// 即: 123的情况下: 第一位取了1 后, 第二位 只能取1后面的两个值 所以 只有 1 2,  13,  
    		// 对1234 而言,第一位为2 的情况下,两个值的可能: 2 3、 2 4.
    		for(int i=l;i<=n;++i){
    			res.push_back(i);
    			getCombine(result, res,i+1, k, n);
    			res.pop_back();
    		}
    	}
    }

};

78 只是题目把解变了一种方式说出来 , 本来77题只要两个数的 可能组合。 ,现在78题要的是 0~n可数的所有可能组合。

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
    	if(nums.size() == 0)
    		return {};
    	vector<vector<int> > result;
    	vector<int> res;
    	result.push_back({});
    	for(int i=1;i<=nums.size();++i){
    		getSubset(result, res, nums, i, 0);
    	}
    	return result;
    }
    void getSubset(vector<vector<int> >& result, vector<int>& res, vector<int> nums, int need, int k){
    	if(res.size() == need){
    		result.push_back(res);
    		return ;
    	}else{
    		for(int i=k;i<nums.size();++i){
    			res.push_back(nums[i]);
    			getSubset(result, res, nums, need, i+1);
    			res.pop_back();
    		}
    	}
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值