数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]
递归条件
- 左节点的数量==输入的参数n
- 右节点的数量==输入的参数n
同时在做递归的时候,需要这么判断: - 左括号的数量<输入的参数
- 同时右节点的数量<输入的参数
- 左括号的数量>右括号的数量
import java.util.*;
class Code22{
public static void main(String[] args) {
Code22 code22 = new Code22();
List<String> list = code22.generateParenthesis(2);
System.out.println(list);
}
List<String> res = new ArrayList<String>();
public List<String> generateParenthesis(int n){
if(n == 0){
return new ArrayList<String>();
}
dfs(0,0,"",n);
return res;
}
/**
* 左节点的数量==输入的参数
* 右节点的数量==输入的参数n
*同时在做递归的时候,需要这么判断:
*左括号的数量<输入的参数
*同时右节点的数量<输入的参数
*左括号的数量>右括号的数量
* @param left [description]
* @param right [description]
* @param tmp [description]
* @param n [description]
*/
public void dfs(int left,int right,String tmp,int n){
if(left == n && right == n){
res.add(tmp);
return;
}
if(left < n){
dfs(left+1,right,tmp+"(",n);
}
if(left > right && right < n){
dfs(left,right+1,tmp+")",n);
}
}
}
递归思路图解