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:code
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
咱們能夠在每一個index上肯定上面狀態帶來的每一個狀態能引進的全部狀態,能夠當作是廣度遍歷。orm
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); }