import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return string字符串ArrayList
*/
public ArrayList<String> generateParenthesis (int n) {
// write code here
ArrayList<String> ans = new ArrayList<>();
dfs(ans, n, 0, 0, new StringBuilder());
return ans;
}
private void dfs(ArrayList<String> ans, int n, int left, int right,
StringBuilder sb) {
if (left == n && right == n) {
ans.add(sb.toString());
return;
}
// 如果左括号数量小于n,可以使用左括号
if (left < n) {
sb.append("(");
dfs(ans, n, left + 1, right, sb);
sb.deleteCharAt(sb.length() - 1);
}
// 如果右括号数量小于n且小于左括号数量,可以使用右括号,必须要保证先使用左括号(在左右括号数量相等的情况下)
if (right < n && left > right) {
sb.append(")");
dfs(ans, n, left , right + 1, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
}