216. Combination Sum III

来源:互联网 发布:plc编程入门梯形图视频 编辑:程序博客网 时间:2024/06/08 07:12

问题描述
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]]

解题思路
该问题给出我们两个参数,k和n,要求我们列出k个数和为n的所有组合,可以用的数字为1~9。我们可以采用递归循环调用的方法:我们可以用一个向量num存现有的数字的集合,n是k个数字之和,如果n小于0,则直接返回;如果n正好等于0,而且此num中数字的个数正好为k,说明此时是一个正确解,将其存入结果result中。
代码展示

#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std; class Solution {public:    vector<vector<int> > combinationSum3(int k, int n) {        vector<vector<int> > result;        vector<int> num;        help(k, n, 1, num, result);        return result;    }    void help(int k, int n, int level, vector<int> &num, vector<vector<int> > &result){        if(n < 0) return;        if(n == 0 && num.size() == k) result.push_back(num);        for(int i=level;i<=9;++i){            num.push_back(i);            help(k, n-i, i+1, num, result);            num.pop_back();        }    }};int main(){    int k, n;    cout<<"请输入 k 和 n :";    cin>>k>>n;    Solution solution;    vector<vector<int> > result = solution.combinationSum3(k, n);    int size = result.size();    for(int i=0;i<size;i++){        int size1=result[i].size();        cout<<"[";        int j;        for(j=0;j<size1-1;j++){            cout<<result[i][j]<<", ";        }        cout<<result[i][j]<<"]"<<endl;    }     return 0;}

运行结果展示
这里写图片描述
这里写图片描述
这里写图片描述

原创粉丝点击