# [216. Combination Sum III](https://leetcode.com/problems/combination-sum-iii/) # 思路 从1-9十个数字中选出k个数字和为n, 要求返回所有组合. 这种求所有组合的题一般就是DFS, 此题为了避免重复, 我们需要一个start标记, 每次从start开始进行递归DFS调用而不是每次都从1. 另外, 由于有了start标记, 我们也不需要使用visited数组了. # C++ ``` C++ class Solution { private: void DFS(int start, int k, int n, vector>&res, vector&out){ if(k < 0 || n < 0) return; if(k == 0 || n == 0){ if(n == k) res.push_back(out); return; } // 每次从start开始进行递归调用而不是每次都从1 for(int i = start; i <= 9; i++){ out.push_back(i); DFS(i + 1, k - 1, n - i, res, out); out.pop_back(); } } public: vector> combinationSum3(int k, int n) { vector>res; vectorout; DFS(1, k, n, res, out); return res; } }; ```