216. 组合总和 III
有了 77. 组合 的启发后,就成功地自己写了通过的代码
class Solution { public: vector<vector<int>> res; vector<int> path; int sum=0; void combineSum(int k,int n,int startNum) { if(path.size()==k&&sum==n) { res.push_back(path);return; } for(int i=startNum;i<=9&&i<=n-sum;i++) { path.push_back(i); sum+=i; combineSum(k,n,i+1); path.pop_back(); sum-=i; } } vector<vector<int>> combinationSum3(int k, int n) { combineSum(k,n,1); return res; } };
这是代码随想录的剪枝后的代码
class Solution { private: vector<vector<int>> result; // 存放结果集 vector<int> path; // 符合条件的结果 void backtracking(int targetSum, int k, int sum, int startIndex) { if (sum > targetSum) { // 剪枝操作 return; // 如果path.size() == k 但sum != targetSum 直接返回 } if (path.size() == k) { if (sum == targetSum) result.push_back(path); return; } for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝 sum += i; // 处理 path.push_back(i); // 处理 backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndex sum -= i; // 回溯 path.pop_back(); // 回溯 } } public: vector<vector<int>> combinationSum3(int k, int n) { result.clear(); // 可以不加 path.clear(); // 可以不加 backtracking(n, k, 0, 1); return result; } };
标签:return,int,sum,targetSum,result,path,leetcode216,III,总和 From: https://www.cnblogs.com/uacs2024/p/16723832.html