括号生成-Day003
题目:
给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。
例如,给出n=3,解集为:
“((()))”, “(()())”, “(())()”, “()()()”, “()(())”
示例1
输入:1
返回值:["()"]
示例2
输入:2
返回值:["(())","()()"]
解决方法00:
- 基本思想:
- 生成所有合法组合,实际上就是遍历所有状态,采用dfs实现
- 递归函数参数有三:临时字符串
str
、剩余左括号left
和剩余右括号right
- 想要合法,在遍历过程中一定满足
right >= left
- 结束递归?
right = 0
- 代码实现:
class Solution {
public:
vector<string> result;
int n;
void func(string str,int left,int right)
{
if(!right)
{
result.push_back(str);
return;
}
if(left > 0)
{
func(str + "(",left - 1,right);
}
if(right > left)
{
func(str + ")",left,right - 1);
}
}
vector<string> generateParenthesis(int n) {
// write code here
cin >> n;
func("",n,n);
return result;
}
};