题目描述
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
求解思路
基本思路就是生成出来所有可能的字符串,然后再从中选择出有效的字符串括号组合。
我们只需要归纳出剪枝的条件:
- 左括号的个数大于 n ;
- 右括号的个数大于左括号。
输入输出示例
代码
class Solution {
public List<String> res = new ArrayList<>();
public List<String> generateParenthesis(int n) {
if(n <= 0) return res;
dfs(n, "", 0, 0);
return res;
}
private void dfs(int n, String path, int left,int right){
if(left > n || right > left) return;
if(path.length() == 2*n){
res.add(path);
return;
}
dfs(n,path+"(",left+1,right);
dfs(n,path+")",left,right+1);
}
}