给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
分析:
递归生成括号字符串,难点是递归结束条件。
直接看代码吧,不好说。left表示左括号的个数,right表示右括号的个数
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> result;
function(n,n,"",result);
return result;
}
void function(int left, int right, string str, vector<string>& result){
// 当括号个数小于0了,说明生成的字符串是错的
if(left < 0 || right < 0) return;
// 在生成的括号字符串中前面的在括号一定比右括号多,所以left一定小,否则生成括号错误
if(left > right) return;
if(left == right && left == 0){
result.push_back(str);
}
// 加上左括号
function(left-1, right, str+'(', result);
// 加上右括号
function(left, right-1, str+')', result);
}
};