1 public class Solution {
2 public ArrayList<String> generateParenthesis(int n) {
3 // IMPORTANT: Please reset any member data you declared, as
4 // the same Solution instance will be reused for each test case.
5 ArrayList<String> result = new ArrayList<String>();
6 StringBuilder builder = new StringBuilder();
7 generate(result, builder, n, n);
8 return result;
9 }
10 private void generate(ArrayList<String> result, StringBuilder builder, int start, int end){
11 if(start == 0 && end == 0){
12 result.add(builder.toString());
13 return;
14 }
15 if(start > 0){
16 builder.append('(');
17 generate(result, builder, start-1, end);
18 builder.deleteCharAt(builder.length()-1);
19 }
20 if(end > start){
21 builder.append(')');
22 generate(result, builder, start, end-1);
23 builder.deleteCharAt(builder.length()-1);
24 }
25 }
26 }