欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 回溯_组合总和III

回溯_组合总和III

2025/4/21 16:43:03 来源:https://blog.csdn.net/Q95470/article/details/146677452  浏览:    关键词:回溯_组合总和III

回溯_组合总和III

  • 一、leetcode-216
  • 二、题解
    • 1.引库
    • 2.代码


一、leetcode-216

组合总和III
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

输入:k = 3, n = 7
输出:[[1,2,4]]


二、题解

1.引库

 #include <iostream>#include <cstdio>#include <cstdlib>#include <queue>#include <stack>#include <algorithm>#include <string>#include <map>#include <set>#include <vector>using namespace std;

2.代码

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracing(int sum,int k,int n,int startindex){if(path.size()==k){if(sum==n){result.push_back(path);return ;}}for(int i=startindex;i<=9;i++){sum+=i;path.push_back(i);backtracing(sum,k,n,i+1);sum-=i;path.pop_back();}return ;}vector<vector<int>> combinationSum3(int k, int n) {backtracing(0,k,n,1);return result;}
};

我们说过,回溯法虽然是暴力搜索,但也有时候可以有点剪枝优化一下的。

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracing(int sum,int k,int n,int startindex){if(sum>n){return ;}if(path.size()==k){if(sum==n){result.push_back(path);return ;}}for(int i=startindex;i<=9;i++){sum+=i;path.push_back(i);backtracing(sum,k,n,i+1);sum-=i;path.pop_back();}return ;}vector<vector<int>> combinationSum3(int k, int n) {backtracing(0,k,n,1);return result;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词