题目:
数字
n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例:
代码分析:
class Solution {
public:
//进行回溯调用
vector<string> generateParenthesis(int n) {
if(n<=0)
{
return res;
}
gent("",n,n);
return res;
}
//因为是生产括号,所以左括号数量要和右括号数量保持一直,所以这里传递的n要变成个
//n同时是左括号数同时页是右括号数
//
void gent(string str,int left,int right)
{
//使用一个str进行括号的存储
//当左右括号数量都等于0时,表示不需要在生成括号了直接返回
if(left==0&&right==0)
{
res.push_back(str);//直接在vector中插入结果,但是结果可能不是只有一种
return;
}
//如果左括号等于右括号数,那么可以直接插入左括号
if(left==right)
{
gent(str+"(",left-1,right);
}//如果需要插入的左括号数小于右括号数,那么可以插入左括号也可以插入右括号
else if(left<right)
{
if(left>0){
gent(str+"(",left-1,right);
}
gent(str+")",left,right-1);
}
}
private:
vector<string>res;//创建一个存放 括号多种生成方式的vector容器
};
题目来源:22. 括号生成 - 力扣(LeetCode)