力扣刷题22. 括号生成
22. 括号生成 - 力扣(LeetCode)
递归一次加入括号即可,需要定义两个变量用来记录左括号与右括号的数量,如果左括号的值小于最大值,则加入左括号,进行递归,如果右括号小于左括号,则加入进行递归
class Solution {
List<String> list;
int n;
StringBuilder sb;
public List<String> generateParenthesis(int n) {
this.n = n;
list = new ArrayList<>();
sb = new StringBuilder();
dfs(0, 0);
return list;
}
public void dfs(int count1, int count2) {
if (sb.length() == n * 2 && count1 == n && count2 == n && !list.contains(sb.toString())) {
list.add(sb.toString());
return;
}
if (count1 < n) {
sb.append('(');
dfs(count1 + 1, count2);
sb.deleteCharAt(sb.length() - 1);
}
if (count2 < count1) {
sb.append(')');
dfs(count1, count2 + 1);
sb.deleteCharAt(sb.length() - 1);
}
}
}