StringBuilder类的toString()方法返回一个新的String对象,且对StringBuilder后续的修改不会影响该String,所以不用像List一样拷贝一份。左右括号可以用单引号也可以用双引号。StringBuilder类使用length()方法来确定长度。代码如下:
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<>();
dfs(n, 0, 0, new StringBuilder(), ans);
return ans;
}
private void dfs(int n, int l, int r, StringBuilder sb, List<String> ans){
if(l == n && r == n){
ans.add(sb.toString());
}
if(l < n){
sb.append('(');
dfs(n, l + 1, r, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
if(r < l){
sb.append(')');
dfs(n, l, r + 1, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
}
}