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;
DFS(A,k,target,0,0,result,temp);
return result;
}
void DFS(vector<int> &A, int k, int target,int sum,int index,vector<vector<int> >&result,vector<int>&temp)
{
if(temp.size()==k&&sum==target)
{
result.push_back(temp);
return ;
}
if(index==A.size()||sum>target)
return;
temp.push_back(A[index]);
DFS(A,k,target,sum+A[index],index+1,result,temp);
temp.pop_back();
DFS(A,k,target,sum,index+1,result,temp);
}
temp.push_back()
Temp.pop_back();
必须配对使用而且与跟随语句的位置无关,这两个的使用可以保证,在退出当前的递归之后,不会对上一个的递归状态产生影响。
网友评论