力扣链接
题目描述
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
解题思路
官方题解链接
我自己写的回溯代码很冗余而且debug了半天才通过,想法和官方题解方法二是一样的。
代码(回溯)
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
recur(n, 0, 0, new StringBuilder(), list);
return list;
}
void recur(int n, int leftNum, int rightNum, StringBuilder builder, List<String> list) {
if (builder.length() == n * 2) {
list.add(builder.toString());
return;
}
if (leftNum < n) {
builder.append("(");
recur(n, leftNum + 1, rightNum, builder, list);
builder.deleteCharAt(builder.length() - 1);
}
if (rightNum < leftNum) {
builder.append(")");
recur(n, leftNum, rightNum + 1, builder, list);
builder.deleteCharAt(builder.length() - 1);
}
}
}
复杂度
|