216. Combination Sum III

来源:互联网 发布:域名隐藏ip地址 编辑:程序博客网 时间:2024/05/22 07:43

1、题目描述

输入两个整数k和n,从1-9中选k个数,使得k数之和为n,返回所有这样的k元组。


2、思路

Backtracking。

和II差不多,比II简单的一点是,数组不会有重复元素,所以dfs的时候不用检查了。

另外需要一个变量来记录组成小组合的元素数量,确保是k个数,和为n。


3、代码

vector<vector<int>> combinationSum3(int k, int n) {        vector<vector<int>> ans;        vector<int>v;        dfs(ans,v,n,k,1);        return ans;    }    void dfs(vector<vector<int>>& ans,vector<int>& v, int n, int k, int start){        if(n==0){            if(k==0){                ans.push_back(v);                return;            }            else                return;        }                else if(n<0||k==0)            return;                for(int i=start;i<=9;i++){                            v.push_back(i);                dfs(ans,v,n-i,k-1,i+1);                v.pop_back();                        }    }