Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
格式正确的原则:左括号先于右括号出现,因此用变量分别计数左括号和右括号出现的次数,一开始都是n次,出现一次就减一。当left<right时才加入右括号。backtracking方法。
class Solution { public List<String> generateParenthesis(int n) { List<String> res = new ArrayList<String>(); doParenthesis(res,n,n,""); return res; } public void doParenthesis(List<String> res,int left,int right,String s){ if(left==0&&right==0){ res.add(s); return; } if(left>0) doParenthesis(res,left-1,right,s+"("); if(right>0&&left<right) doParenthesis(res,left,right-1,s+")"); } }