Thinking process
Not very typical backtracking
Mistakes
the number of open should be larger or equals to the number of close tags
public class Solution {
public List<String> generateParenthesis(int n) {
List<String> result = new ArrayList<>();
dfsHelper(result, "", n, n);
return result;
}
private void dfsHelper(List<String> result, String str, int open, int close) {
if (open > close) return;
if (open > 0) {
dfsHelper(result, str + "(", open - 1, close);
}
if (close > 0) {
dfsHelper(result, str + ")", open, close - 1);
}
if (open == 0 && close == 0) {
result.add(str);
return ;
}
}
}