给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
样例
样例 1:
输入: [1,2,3,4], k = 2, target = 5
输出: [[1,4],[2,3]]
样例 2:
输入: [1,3,4,6], k = 3, target = 8
输出: [[1,3,4]]
class Solution {
public:
/*
* @param A: an integer array
* @param k: a postive integer <= length(A)
* @param target: an 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>>result;
vector<int> temp;
recursion(result,A,k,0,target,temp,0);
return result;
}
void recursion(vector<vector<int>>&result,vector<int> &A ,int k,int i,int target,vector<int> &temp,int sum)
{
if(temp.size()==k&&sum==target)
{
result.push_back(temp);
return;
}
else if(A.size()==i||sum>target) return;
temp.push_back(A[i]);
recursion(result,A,k,i+1,target,temp,sum+A[i]);
temp.pop_back();
recursion(result,A,k,i+1,target,temp,sum);
}
};