[LeetCode]22. Generate Parentheses

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);
}
相關文章
相關標籤/搜索