22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题
类似全排列问题,用回溯算法,求得满足要求的加入结果中;
class Solution {
public:
vector<string> generateParenthesis(int n) {
string res="";
Generate(0,0,res,n);
return result;
}
private:
vector<string> result;
vector<string> d={"(",")"};
void Generate(int left, int right, string &res,int n)
{
if(left>n||right>n) return;
if(left==n&&right==n)
result.push_back(res);
res+="(";
Generate(left+1,right,res,n);
res.pop_back();
if(left>right){
res+=")";
Generate(left,right+1,res,n);
res.pop_back();
}
}
};
从空列表开始,若‘(’ 数量大于“)” 数量,则可放入“)”,否则只加入“(”;
并加入两个括号数量的判断;

该博客介绍了一个使用回溯算法解决括号有效组合的问题。当需要生成指定数量括号对时,通过递归回溯的方式,确保生成的所有括号组合都是有效的。文章以LeetCode上的22题为例,提供了详细的解题思路和判断条件。
416

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



