/**
* Index: 22
* Title: Generate Parentheses
* Author: ltree98
**/
括号配对种类
必须左右配对,不可右左。
做完以后,看了其他的解法,思维其实是一样的。
递归的解法
先放一个符合条件的,然后获得后面符合条件的,再讲这个与后面符合条件的组合。
层层返回符合条件的情况,进行组合,再向上返回。
终点就是 当左右括号剩余均为0的时候。
当然,放置括号也是有限制的,当前放置的右括号数量不可超过左括号数量。
class Solution {
private:
vector<string> generateParenthesisTemp(int l, int r) {
vector<string> vec;
if(l == 0 && r == 0) {
vec.push_back("");
return vec;
}
if(l <= r) {
if(l > 0) {
string temp = "(";
vector<string> vs = generateParenthesisTemp(l-1, r);
for(int i = 0; i < vs.size(); i++)
vec.push_back(temp+vs[i]);
}
if(r > 0) {
string temp = ")";
vector<string> vs = generateParenthesisTemp(l, r-1);
for(int i = 0; i < vs.size(); i++)
vec.push_back(temp+vs[i]);
}
}
return vec;
}
public:
vector<string> generateParenthesis(int n) {
return generateParenthesisTemp(n, n);
}
};

本文介绍了一种递归算法来生成所有可能的有效括号组合。通过递归地添加左右括号,并确保任何时候右括号的数量不超过左括号的数量,从而避免无效组合。当左右括号数量均为0时,递归终止。
2043

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



