LeetCode22-Generate-Parentheses

43次阅读

共计 1012 个字符,预计需要花费 3 分钟才能阅读完成。

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);
}

正文完
 0