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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
我们可以在每个index上确定上面状态带来的每个状态能引进的所有状态,可以看成是广度遍历。
public List<String> generateParenthesis(int n) {
List<String> list=new ArrayList();
HashMap<String,int[]> map=new HashMap();
if(n<=0) return list;
list.add("(");
map.put("(",new int[]{1,1});
for(int i=2;i<=2*n;i++){
List<String> list1=new ArrayList();
HashMap<String,int[]> map1=new HashMap();
for(String s:list){
if(map.get(s)[0]>0){
list1.add(s+")");
map1.put(s+")",new int[]{map.get(s)[0]-1,map.get(s)[1]});
}
if(map.get(s)[1]<n){
list1.add(s+"(");
map1.put(s+"(",new int[]{map.get(s)[0]+1,map.get(s)[1]+1});
}
}
list=list1;
map=map1;
}
return list;
}
递归的写法比较简单,不知道递归为什么会快那么多
List<String> list=new ArrayList();
int a=0;
public List<String> generateParenthesis(int n) {
a=n;
helper("",0,0);
return list;
}
public void helper(String s,int left,int total){
if(left==0 && total==a) {
list.add(s);
return;
}
if(left>0) helper(s+")",left-1,total);
if(total<a) helper(s+"(",left+1,total+1);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。