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:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
class Solution {
List<String> list = new ArrayList<>();
public List<String> generateParenthesis(int n) {
StringBuilder str = new StringBuilder();
generateCore(0,0,str,n);
return list;
}
public void generateCore(int left, int right, StringBuilder str, int max){
if(right==max){
list.add(str.toString());
return;
}else{
if(left<max){
str.append("(");
generateCore(left+1,right,str,max);
str.deleteCharAt(str.length()-1);
}
if(right<left){
str.append(")");
generateCore(left,right+1,str,max);
str.deleteCharAt(str.length()-1);
}
}
}
}
我自己写的是用排列组合加上第 20 题的代码,有些繁琐不如上面的解法,为了更直观的理解这个递归的过程,就画了下面这个示意图。轻拍……
http://wiki.jikexueyuan.com/project/leetcode-book/images/6.png