您的位置:首页 > 其它

leetcode - Combination Sum

2013-03-26 19:11 435 查看
题目描述:点击此处

class Solution {
public:
void getResult(vector<vector<int>> & rlt, vector<int> current, vector<int>* tags, int target){
if (target <= 0)
return;
int maxN = 1000000000;
if (!current.empty())
maxN = *(current.end()-1);
vector<int>::iterator vi;
for (vi = tags[target].begin(); vi!=tags[target].end() && *vi<=maxN; vi++){
vector<int> tvi = current;
tvi.push_back(*vi);
if (target-*vi==0){
vector<int> rr;
vector<int>::iterator ii;
for (ii=tvi.end()-1; ii+1 != tvi.begin(); ii--){
rr.push_back(*ii);
}
rlt.push_back(rr);
}
else getResult(rlt, tvi, tags, target-*vi);
}
}
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort (candidates.begin(), candidates.end());
vector<int>::iterator vi;
vector<int>cands;
for (vi=candidates.begin(); vi!=candidates.end(); vi++){
if (!cands.empty() && *(cands.end()-1) == *vi)
continue;
cands.push_back(*vi);
}
vector<int> * tags = new vector<int>[target+1]();
tags[0].push_back(0);
for (vi=cands.begin(); vi!=cands.end(); vi++){
for (int i=*vi; i<=target; i++){
if (!tags[i-*vi].empty() && find(tags[i].begin(), tags[i].end(),*vi)==tags[i].end())
tags[i].push_back(*vi);
}
}
vector<vector<int>> rlt;
vector<int> current;
getResult(rlt, current, tags, target);
delete []tags;
return rlt;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: