括号组合。(DFS)
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1 输出:["()"]
提示:
1 <= n <= 8
class Solution {
vector<string> v;
string path;
public:
vector<string> generateParenthesis(int n) {
dfs(n, 0, 0);
return v;
}
void dfs(int n, int l, int r){
if(path.size() == 2 * n){ //当长度达到 2 * n 时,完成一个有效组合
v.push_back(path);
return;
}
if(l < n){ // 如果左括号数量小于 n
path.push_back('(');
dfs(n, l + 1, r);
path.pop_back();
}
if(r < l){ // 如果右括号数量小于左括号数量
path.push_back(')');
dfs(n, l, r + 1);
path.pop_back();
}
}
};