1. 程式人生 > >【LeetCode】216. 組合總和 III 結題報告 (C++)

【LeetCode】216. 組合總和 III 結題報告 (C++)

原題地址:https://leetcode-cn.com/problems/combination-sum-iii/submissions/

題目描述:

找出所有相加之和為 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]]

 

解題方案:

回溯法,記住使用dsf深度優先遍歷就完事了。

程式碼:

class Solution {
public:
    vector<vector<int>> ans;
    void dsf(int k, int n, int m, vector<int> mem){
        if(n == 0 && k == 0)
            ans.push_back(mem);
        if(n < 0 || k < 0)
            return;
        for(int i = m; i <= 9; i ++){
            mem.push_back(i);
            dsf(k - 1, n - i, 1 + i, mem);
            mem.pop_back();
        }
    }
    
    vector<vector<int>> combinationSum3(int k, int n) {
        vector<int> mem;
        dsf(k, n, 1, mem);
        return ans;
    }
};