递归可以理解为深度优先遍历穷举+回溯剪枝
class Solution {
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
generateParenthesis(n, "", 0, 0, result);
return result;
}
private void generateParenthesis(int n, String s, int open, int close, List<String> result) {
if (open == n && close == n) {
result.add(s);
//System.out.println(s);
}
if (open < n) {
generateParenthesis(n, s + "(", open + 1, close, result);
}
if (close < open) {
generateParenthesis(n, s + ")", open, close +1, result);
}
}
}