22. 括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
思路:递归,注意填入左括号的数量往往要先多于右括号
java的code:
import java.util.ArrayList;
import java.util.List;
class Solution {
static List<String> list ;
public List<String> generateParenthesis(int n) {
list = new ArrayList<String>();
int m = n;
int k = n;
fn("", n, m,2*k);
return list;
}
public static void fn(String s, int n, int m, int kk) {
if( m < n) {
return;
}
if(n < 0){return;}
if(m < 0){return;}
if(n == 0 && m == 0 && s.length() == kk) {
System.out.println(s);
list.add(s);
return;
}
fn(s + "(", n-1, m,kk);
fn(s + ")", n, m-1 , kk);
}
}