您的位置:首页 > 其它

LeetCode: Combination Sum II

2014-06-23 12:33 411 查看
思路:和前面一题一样,不过这次是要保证同一个元素不能重复选取,所以调用函数本身时要从当前位置的下一个开始pos+1,而且为了不超时,需要保证如果当前元素与下一个元素相同,则下一个元素不需要取代当前元素搜索了,因为如果A[pos+1]后面能够找到解,那么在A[pos]开始找的时候,就已经找到了,因为A[pos] == A[pos+1]。

code:

class Solution {
public:
void solveSum(vector<int> &A, int pos, int target, vector<int> curRet, int curSum, vector<vector<int> > &ret){
if(curSum == target){
ret.push_back(curRet);
return;
}
else if(curSum > target) return;
for(int i = pos;i < A.size();i++){
vector<int> temp = curRet;
temp.push_back(A[i]);
solveSum(A,i+1,target,temp,curSum+A[i],ret);
while(i<A.size()-1 && A[i] == A[i+1])i++;
}
}
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
vector<vector<int> > ret;
vector<int> curRet;
sort(num.begin(),num.end());
solveSum(num,0,target,curRet,0,ret);
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: