leetcode 组合总和 深搜

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。 
示例 1:

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

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/combination-sum-iii

思路:分析DFS,需要的参数必然有数的个数,数的总和,在函数内部枚举第一个数,然后去递归枚举第二个数直到k个数,若满足条件就加入答案,由于不能有重复,所以枚举的时候确定一个顺序,顺序枚举就行,这样会避免1+2+4和4+1+2都出现,所以传参数还需要有一个枚举起点。

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> path;
    vector<vector<int>> combinationSum3(int k, int n) {
        dfs(k,n,1);
        return ans;
    }
    void dfs(int k,int n,int start)
    {
        if(!k){
            if(!n)ans.push_back(path);
            return;
        }
//k个数,需要剩下的数有K个数,9-i+1>=k,则i<=10-k
        for(int i=start;i<=10-k;++i){
            if(n>=i){//只有n>=i的时候才能加进去
                path.push_back(i);
                dfs(k-1,n-i,i+1);
                path.pop_back();
            }
        }
    }
};
原文地址:https://www.cnblogs.com/clear-love/p/11363291.html