Cover image for 面试经典150题 P39 组合总和

面试经典150题 P39 组合总和


时间轴

时间轴

2025-11-29

init


题目:

回溯,注意 start,因为可以用重复数字,所以 backtrace 用 i 作为下一个 start.

123456789101112131415161718192021222324252627282930313233343536
#include <vector>#include <algorithm>using std::vector;class Solution {    private:	vector<vector<int> > res;	void backtrace(vector<int> &path, vector<int> &candidates, int start, int target)	{		if (target == 0) {			res.push_back(path);			return;		} else if (target < 0) {			return;		}		for (int i = start; i < candidates.size(); i++) {			if (candidates[i] > target) { //剪枝				break;			}			path.push_back(candidates[i]);			// 进入下一层			backtrace(path, candidates, i, target - candidates[i]);			path.pop_back();		}	}    public:	vector<vector<int> > combinationSum(vector<int> &candidates, int target)	{		vector<int> path;		std::sort(candidates.begin(), candidates.end());		backtrace(path, candidates, 0, target);		return res;	}};

leetcode hot 100 rewrite

1234567891011121314151617181920212223242526272829303132333435363738
#include <vector>using std::vector;class Solution {    private:        void __combinationSum(vector<int> &candidates, int target, vector<vector<int> > &res,                              vector<int> &curr, int curr_sum, int pos)        {                if (curr_sum == target) {                        res.push_back(curr);                        return;                } else if (curr_sum > target) {                        return;                }                int i, n = candidates.size();                for (i = pos; i < n; i++) {                        curr.push_back(candidates[i]);                        curr_sum += candidates[i];                        __combinationSum(candidates, target, res, curr, curr_sum, i);                        curr_sum -= candidates[i];                        curr.pop_back();                }        }    public:        vector<vector<int> > combinationSum(vector<int> &candidates, int target)        {                vector<vector<int> > res;                vector<int> curr;                __combinationSum(candidates, target, res, curr, 0, 0);                return res;        }};
评论加载中…