LeetCode第22题:括号生成
这题只要想明白一个点就很容易:当前左括号数等于右括号数则下一步只能放左括号,否则左右不超出数量就都能放。
代码如下:
public static List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList<>();
if (n < 1) {
return ans;
}
generate(ans, "", n, n);
return ans;
}
private static void generate(List<String> result, String str, int left, int right) {
if (right <= 0) {
result.add(str);
return;
}
// 左括号剩余数等于右括号,只能放左括号
if (left == right) {
generate(result, str + "(", left - 1, right);
} else {
// 左括号数量大于右括号时,只要还有左括号,就左右都能放
if (left <= 0) {
generate(result, str + ")", left, right - 1);
} else {
generate(result, str + "(", left - 1, right);
generate(result, str + ")", left, right - 1);
}
}
}