给定n个不同的正整数,整数k(1<= k <= n)以及一个目标数字。
在这n个数里面找出K个数,使得这K个数的和等于目标数字,你需要找出所有满足要求的方案。
给出[1,2,3,4],k=2, target=5,返回 [[1,4],[2,3]]
分析:就是简单的递归练习,注意剪枝
代码:
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); } };