面试刷题第17天
LeetCode刷题——22. 括号生成
1、题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
2、解题思路
采用递归方法:
(1)若左括号有剩余,就拼接一个左括号;
(2)如果右括号剩余多余左括号,可以拼接一个右括号;
(3)左右括号均不剩余了,递归终止。
该方法和dfs一样,将所有的路径都走完,就结束了。
Java代码如下:
class Solution {
List<String> res = new ArrayList<>();
public List<String> generateParenthesis(int n) {
dfs(n, n, "");
return res;
}
public void dfs(int left, int right, String str){
//左右括号均不剩余了,递归终止
if(left == 0 && right == 0){
res.add(str);
return;
}
//若左括号有剩余,就拼接一个左括号
if(left > 0){
dfs(left-1, right, str+"(");
}
//如果右括号剩余多余左括号,可以拼接一个右括号
if(right > left){
dfs(left, right-1, str+")");
}
}
}