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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ] Show Company Tags Show Tags Show Similar Problems最后一遍这道题。需要注意的地方是哪里需要添加右括号(当右括号个数小鱼左括号个数的时候都可以添加);终止条件时left == n, 左边括号数达到最大,这时候如果右括号没有满需要添加右括号。
代码:
public List<String> generateParenthesis(int n) { if(n<=0){ return new ArrayList<>(); } List<String> result = new ArrayList<>(); dfs(result, n, 0, 0, ""); return result; } private void dfs(List<String> result, int n, int left, int right, String cur){ if(left == n){ while(left>right){ cur = cur + ")"; right++; } result.add(cur); return; } dfs(result, n, left+1, right, cur+"("); if(right<left){ dfs(result, n, left, right+1, cur+")"); } }