给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
题目链接:http://www.lintcode.com/zh-cn/problem/k-sum-ii/
典型的深度优先搜索,当然这道题可以返回res.size()得到上一题的结果,但是这样的效率太低了。
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<vector<int> > res;
vector<int> temp;
sum(A,k,target,temp,res,0);
return res;
}
void sum(vector<int> A,int k,int target,vector<int> &temp,vector<vector<int> > &res,int i) {
if (k == 0 && target == 0) {
res.push_back(temp);
return;
}
if (i == A.size() || target < 0) return;
temp.push_back(A[i]);
sum(A,k - 1,target - A[i],temp,res,i + 1);
temp.pop_back();
sum(A,k,target,temp,res,i + 1);
}
};