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 }