给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
您在真实的面试中是否遇到过这个题?
Yes
样例
标签
Expand
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
相关题目 Expand
分析:就是简单的递归练习,注意剪枝
代码:
class Solution {
public:
/**
* @param A: an integer array.
* @param k: a positive integer (k <= length(A))
* @param target: a integer
* @return a list of lists of integer
*/
vector<vector<int> > kSumII(vector<int> A, int k, int target) {
// write your code here
vector<int> cur;
vector<vector<int> > ret;
deal(A,0,k,target,0,cur,ret);
return ret;
}
void deal(vector<int>& A,int index,int k,int target,int sum,vector<int> cur,vector<vector<int> > &ret)
{
if(cur.size()==k&&sum==target)
{
ret.push_back(cur);
return;
}
if(index==A.size())
return;
if(sum>target)
return;
cur.push_back(A[index]);
deal(A,index+1,k,target,sum+A[index],cur,ret);
cur.pop_back();
deal(A,index+1,k,target,sum,cur,ret);
}
};