leetcode : leetcode 39. Combination Sum,报了 free(): invalid pointer: 0x000000000120df00 ***这个错,想不明白是为什么,没有用指针呀?在哪里会存在 free 的问题呢?代码是这样的。。
vector<vector<int>> combinationSum(vector<int>& candidates, int target) { vector<vector<int> > result ; if(candidates.size() == 0 ) { return result; } sort(candidates.begin(), candidates.end()); vector<int> tmp_memo; vector<int> tmp_index; int tmp_target = target; for(int i = candidates.size() - 1; i >=0; i --) { tmp_index.push_back(i); } while( !tmp_index.empty() ) { int index = tmp_index.back(); //查看有没有越界 if(index >= candidates.size() ) { tmp_index.pop_back(); int i = tmp_index.back(); //父结点出栈 tmp_index.pop_back(); tmp_memo.pop_back(); tmp_target += candidates[i]; continue; } //没有越界就访问 tmp_memo.push_back(candidates[index]); if(tmp_target == candidates[index])//找到目标 { result.push_back(tmp_memo); if(tmp_memo.size() == 1)//只有一个值,表明是顶层结点了,所以直接 break { break; } //当前结点出栈 tmp_index.pop_back(); tmp_memo.pop_back();
//tmp_target += candidates[index];
int i = tmp_index.back();
//父结点出栈
tmp_index.pop_back();
tmp_memo.pop_back();
//目标值要加回去
tmp_target += candidates[i];
//父结点的右兄弟入栈
tmp_index.push_back(i+1);
}
else if(tmp_target < candidates[index])//后面的 candidate 更大,没有寻找的必要
{
if(tmp_memo.size() == 1)//只有一个值,表明是顶层结点了,所以直接 break
{
break;
}
//当前结点出栈,
tmp_index.pop_back();
tmp_memo.pop_back();
//tmp_target += candidates[index];
//父结点出栈
int i = tmp_index.back();
tmp_index.pop_back();
tmp_memo.pop_back();
tmp_target += candidates[i];
//父结点的右兄弟入栈
tmp_index.push_back(i+1);
}
else
{
//
tmp_target -= candidates[index];
//推入下一层的孩子结点
tmp_index.push_back(index);
}
}
return result;
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.