题目描述
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
回溯
package LeetCode;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class DT22 {
ArrayList<String> list = new ArrayList<>();
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
DT22 dt = new DT22();
dt.generateParenthesis(scan.nextInt());
System.out.println(dt.list);
}
public List<String> generateParenthesis(int n) {
String str = "(";
backTrack(str,n,1,0);
return list;
}
private void backTrack(String str, int n,int left,int right) {
if(left == n && right == n){
list.add(str);
return;
}
if(left > n || right > n) return;
String s = str;
int l = left;
int r = right;
for(int i = 0; i < 2; i++) {
if(i == 0) {
left ++;
str += "(";
} else {
if(left > right){
right ++;
str += ")";
} else {
return;
}
}
backTrack(str,n,left,right);
str = s;
left = l;
right = r;
}
}
}