---
# System prepended metadata

title: 'LeetCode #216 [Combination Sum III](https://leetcode.com/problems/combination-sum-iii/)'
tags: [DFS, Recursion, LeetCode, Medium]

---

###### tags: `LeetCode` `Medium` `DFS` `Recursion`
# LeetCode #216 [Combination Sum III](https://leetcode.com/problems/combination-sum-iii/)
### (Medium)

找出總和為 n 且滿足以下條件的 k 個數字的所有有效組合：

* 僅使用數字 1 到 9。
* 每個號碼最多使用一次。
* 返回所有可能的有效組合的列表。 該列表不得包含兩次相同的組合，並且可以以任何順序返回這些組合。


---

終止條件為, 個數(k)歸零, 並且數字總和剛好為目標數(n), 此時將暫存數組存入答案數組中。

而若上述條件中僅達成一者, 則不做其他動作, 直接返回(失敗了)。

而因為不得使用重複數, 因此遞迴呼叫時的起始搜尋值為當前數的下一個數(i+1)。

---
```
class Solution {
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        //k: numbers n:target
        if(!n)return {};
        vector<int> tmp;
        vector<vector<int>> ans;
        dfs(tmp, k, n, ans, 1);
        return ans;
    }
    void dfs(vector<int>& tmp, int nums, int target, vector<vector<int>>& ans, int pos){
        if(nums==0&&target==0){
            ans.push_back(tmp);
            return;
        }
        else if(target==0||nums==0)return;
        for(int i=pos;i<=9;i++){
            tmp.push_back(i);
            dfs(tmp, nums-1, target-i, ans, i+1);
            tmp.pop_back();
        }
    }
};
```