LeetCode Combination Sum III

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Ensure that numbers within the set are sorted in ascending order.


Example 1:

Input: k = 3, n = 7

Output:

 

[[1,2,4]]

 


Example 2:

Input: k = 3, n = 9

Output:

 

[[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> path;
        dfs(res, path, k, n);
        return res;
    }
    
    void dfs(vector<vector<int> >& result, vector<int>& path, int k, int target) {
        if (k == 0 && target == 0) {
            result.push_back(path);
            return;
        }
        if (k == 0 || target < 0) {
            return;
        }
        
        for (int i=1; i<=9; i++) {
            if (!path.empty() && path.back() >= i) {
                continue;
            }
            path.push_back(i);
            dfs(result, path, k - 1, target - i);
            path.pop_back();
        }
    }
};

 

posted @ 2015-05-27 01:07  卖程序的小歪  阅读(162)  评论(0编辑  收藏  举报