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:
"((()))", "(()())", "(())()", "()(())", "()()()"
思路: 第一反应是运用DFS, left与right 分别表示 左右括号,给定的n为括号对,所以就是有n个左括号和n个右括号的组合。当左右括号都尝试完了即为一解, 唯一注意的一点是, 右括号不能出现在左括号前面, 假设left必须不能比right 大
代码:
public List<String> generateParenthesis(int n) { List<String> res = new ArrayList<String>(); String str=""; if(n<=0) return res; setParenthesis(str,n,n,res); return res; } public void setParenthesis(String str, int left, int right, List<String> res){ if(left>right) return; // deal with illegal form of ")(" if(left==0 && right== 0) res.add(str); if(left>0) setParenthesis(str+"(",left-1,right,res); // add "(" if(right>0) setParenthesis(str+")",left,right-1,res); // add ")" }
Reference:
http://www.cnblogs.com/springfor/p/3886559.html