题目链接:leetcode.
回溯的pop简直把我搞懵了
/*
执行用时:4 ms, 在所有 C++ 提交中击败了72.85%的用户
内存消耗:11.5 MB, 在所有 C++ 提交中击败了54.35%的用户
*/
class Solution {
vector<string> ans;
string tmp;
void dfs(int n, int left, int right)
{
if(left > n || right > n)
{
return;
}
if(left == right)
{
if(left == n)
{
ans.push_back(tmp);
return;
}
tmp.push_back('(');
dfs(n, left + 1, right);
tmp.pop_back();
}
else
{
tmp.push_back('(');
dfs(n, left + 1, right);
tmp.pop_back();
tmp.push_back(')');
dfs(n, left, right + 1);
tmp.pop_back();
}
}
public:
vector<string> generateParenthesis(int n) {
dfs(n, 0, 0);
return ans;
}
};
官解瞅着还是好看点
class Solution {
void backtrack(vector<string>& ans, string& cur, int open, int close, int n) {
if (cur.size() == n * 2) {
ans.push_back(cur);
return;
}
if (open < n) {
cur.push_back('(');
backtrack(ans, cur, open + 1, close, n);
cur.pop_back();
}
if (close < open) {
cur.push_back(')');
backtrack(ans, cur, open, close + 1, n);
cur.pop_back();
}
}
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
string current;
backtrack(result, current, 0, 0, n);
return result;
}
};
//作者:LeetCode-Solution
//链接:https://leetcode-cn.com/problems/generate-parentheses/solution/gua-hao-sheng-cheng-by-leetcode-solution/
//来源:力扣(LeetCode)
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
该博客讨论了如何利用回溯算法解决LeetCode上的括号生成问题。两种不同的C++实现被比较,一种是作者自己的实现,另一种是官方解决方案。代码执行时间和内存效率被提及,并且展示了如何通过递归和回溯策略来生成所有有效的括号组合。
470

被折叠的 条评论
为什么被折叠?



