题解 | #牛圈围栏问题#
牛圈围栏问题
https://www.nowcoder.com/practice/4e3bb97bbc2b4382a745abe953f44aee
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return string字符串一维数组
*/
public String[] generateParenthesis (int n) {
// write code here
List<String> ans = new ArrayList<>();
process(n, n, new StringBuilder(), ans);
return ans.toArray(new String[0]);
}
private void process(int l, int r, StringBuilder sb, List<String> ans) {
if (l == 0 && r == 0) {
ans.add(sb.toString());
return;
}
// 如果左括号还可以加,即 l > 0
if (l > 0) {
sb.append('(');
process(l - 1, r, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
// 如果左括号还可以加,即 r > 0,并且要保证已经添加的左括号数量大于右括号数量时,才能再加右括号
if (r > 0 && l < r) {
sb.append(')');
process(l, r - 1, sb, ans);
sb.deleteCharAt(sb.length() - 1);
}
}
}
#深度优先#
查看19道真题和解析