Leetcode22. 括号生成
题目:
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]
题解:递归
java代码:
public static List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
if (n == 0) return list;
dfs("", n, n, list);
return list;
}
private static void dfs(String s, int left, int right, List<String> list) {
if(left==0 && right==0){
list.add(s);
}
//左括号的个数大于右括号的个数,剪枝
if(left>right){
return;
}
if(left>0){
dfs(s+"(",left-1,right,list);
}
if(right>0){
dfs(s+")",left,right-1,list);
}
}
scala代码:
/**
* 递归
*
* @param n
* @return
*/
def generateParenthesis(n: Int): List[String] = {
val list = new ListBuffer[String]()
if (n == 0) {
null
} else {
dfs("", n, n, list)
list.toList
}
}
def dfs(s: String, left: Int, right: Int, list: ListBuffer[String]): Unit = {
if (left == 0 && right == 0) {
list.append(s)
}
if (left > right) {
return
}
if (left > 0) {
dfs(s + "(", left - 1, right, list)
}
if (right > 0) {
dfs(s + ")", left, right - 1, list)
}
}