题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合 例如,给出 n = 3,生成结果为: [ "((()))", "(()())", "(())()", "()(())", "()()()" ]
* 解题思路: * 递归生成字符串 递归方法 function(int i , int j , String s , List<String> list) * 参数 i : 左括号剩余数量 j :右括号剩余熟练 * s : 当前生成的字符串 list: 返回的结果集 * 当 i==j ==0 的时候表示 字符串生成完成 将字符串放入list中 * 当 i==j 的时候 只能在s上拼加‘(’ * 当 i<j &&i>0的时候 s上拼加‘(’ 或者‘)’ * 当 i<j &&i==0的时候 只能在s上拼加‘)’
public List<String> generateParenthesis(int n) {
List<String> res = new ArrayList<>();
res = function(n,n,"",res);
return res;
}
public static List<String> function(int i , int j , String s , List<String> list){
if (i==j&&i==0){
list.add(s);
}else if (i==j){
function(i-1,j,s+"(",list);
} else if (i<j&&i>0){
function(i-1,j,s+"(",list);
function(i,j-1,s+")",list);
} else if (i<j){
function(i,j-1,s+")",list);
}
return list;
}