力扣https://leetcode-cn.com/problems/generate-parentheses/
题目描述
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
有效括号组合需满足:左括号必须以正确的顺序闭合。
分析
有效括号的点: 左括号必须以正确的顺序闭合
那么在生成括号序列的过程中
1. 当左括号的数据小于n 可放置左括号
2. 回溯遍历左括号防止的位置
3. 当左括号数目大于右括号,可放置右括号
举例
当n = 3时,
首先按照左括号的数据小于n可放置左括号。
左边放置3个括号的情况。
回溯 ,左边放置2个括号的情况。
回溯, 左边放置1个括号的情况。
class Solution {
public:
vector<string> arr;
void parenthesis(int left, int right, int n, string res)
{
if (res.size() == n*2) {
arr.push_back(res);
return;
}
if (left < n) {
res.append("(");
parenthesis(left+1, right, n, res);
res.erase(res.size()-1);
}
if (left > right) {
res.append(")");
parenthesis(left, right+1, n, res);
}
}
vector<string> generateParenthesis(int n)
{
// 退出条件 index == n
// 左括号数目 > 右括号数目
// 左括号数目 < 右括号数目 && 右括号数目 < n
string res;
parenthesis(0, 0, n, res);
return arr;
}
};