/*
Sologala @github https://github.com/Sologala/LeetCode.git
LeetCode 22. 括号生成
*/
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
##思路:
采用回溯的方法,用参数k 来表示 当前字符串中的 `(` 的数量。 在每个位置都有两种选择 一个是 放入`(` 。另一种情况是 放入`)`。 当字符串的总长度是2*n 的时候,在判断是否是合法的 组合 在输出就行了。
ac_code
class Solution {
public:
vector<string> ret;
void func(string s,int k,int n){
if(s.length()==2*n){
if(k==0)// 排除 不合法的 组合
ret.push_back(s);
}
else{
if(k<n) func(s+"(",k+1,n);
if(k>0) func(s+")",k-1,n);
}
}
vector<string>generateParenthesis(int n) {
func("",0,n);
return ret;
}
};