package leetcode.editor.cn;
//给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
//
// 例如,给出 n = 3,生成结果为:
//
// [
// "((()))",
// "(()())",
// "(())()",
// "()(())",
// "()()()"
//]
//
// Related Topics 字符串 回溯算法
import java.util.ArrayList;
import java.util.List;
//Java:括号生成
public class P22括号生成{
public static void main(String[] args) {
Solution solution = new P22括号生成().new Solution();
List<String> ans = solution.generateParenthesis(3);
for (int i = 0; i < ans.size(); i++) {
System.out.println(ans.get(i));
}
// TO TEST
}
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
List<String> ans = new ArrayList<>();
public List<String> generateParenthesis(int n) {
if (n == 0) {
return ans;
}
robot(n, 0, 0, 0,"");
return ans;
}
public void robot(int len, int idx, int left, int right, String strTemp) {
if (right > left) {
return;
}
if (idx == 2 * len) {
ans.add(strTemp);
return;
}
if (left < len) {
robot(len, idx + 1, left + 1, right, strTemp + "(");
}
if (right <len) {
robot(len, idx + 1, left, right + 1, strTemp + ")");
}
}
}
//leetcode submit region end(Prohibit modification and deletion)
}