Leetcode刷题(20)

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.


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]]

扫描二维码关注公众号,回复: 2010106 查看本文章

class Solution {
public:
    vector<vector<int>> combinationSum3(int k, int n) {
      vector<vector<int>> result;
      vector<int> sol;//数组每一项
      combination(result,sol,k,n);
      return result;
    }
    
    void combination(vector<vector<int>>&result,vector<int> sol,int k, int n) {
        if(sol.size() == k && n == 0){//递归结束条件,个数为K,且和为n
              result.push_back(sol);//在结果中加入符合条件的数组
              return;
        }

        if(sol.size()<k) {//判断每一个符合条件的数组

            for(int i=sol.empty()? 1:sol.back()+1;i<=9;++i) {
                if(n-i < 0) break;
                sol.push_back(i);
                combination(result,sol,k,n-i);
                 sol.pop_back();//在最后需要清空数组以备下次使用
            }
        }
     
    }
};

猜你喜欢

转载自blog.csdn.net/dlfxjc2/article/details/70244938