1. 程式人生 > >216.組合總和III

216.組合總和III

找出所有相加之和為 n 的 個數的組合組合中只允許含有 1 - 9 的正整數,並且每種組合中不存在重複的數字。

說明:

  • 所有數字都是正整數。
  • 解集不能包含重複的組合。 

示例 1:

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

示例 2:

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

class Solution {
public:
    vector<vector<int> > combinationSum3(int k, int n) {
        vector<vector<int> > res;
        vector<int> out;
        combinationSum3DFS(k, n, 1, out, res);
        return res;
    }
    void combinationSum3DFS(int k, int n, int level, vector<int> &out, vector<vector<int> > &res) 
    {
        if (n < 0) return;
        if (n == 0 && out.size() == k) 
            res.push_back(out);
        for (int i = level; i <= 9; ++i) {
            out.push_back(i);
            combinationSum3DFS(k, n - i, i + 1, out, res);
            out.pop_back();
        }
    }
};