Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
回溯,记录左右括号的出现次数。
每次递归都添加左侧括号。
左侧括号的数量大于右侧括号时递归下一级才可以添加右侧括号。
当左侧括号和右侧括号达到n时,返回字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | class Solution {     int N;     List<String> ret;     StringBuffer sb;          public List<String> generateParenthesis(int n) {         ret = new ArrayList<>();         sb = new StringBuffer();         N = n;         backtracking(0, 0);         return ret;     }          private void backtracking(int left, int right){         if(left > N || right > N){             return;         }         if(left == N && right == N){             ret.add(sb.toString());             return;         }         if(left > right){             sb.append(')');             backtracking(left, right+1);             sb.delete(sb.length()-1, sb.length());                 }         sb.append('(');         backtracking(left+1, right);         sb.delete(sb.length()-1, sb.length());             } }
  |