22. Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

Example 1:

Input: n = 3
Output: ["((()))","(()())","(())()","()(())","()()()"]

Example 2:

Input: n = 1
Output: ["()"]

Constraints:

  • 1 <= n <= 8

My Solutions:

把temp string 加入结果的条件是temp string的长度等于n*2

解法1:先输入一个(到结果里,把(的数量记做open,)的数量记做close。最多可以加n个(。当open的数量超过close的时候,必须加入close。

public List<String> generateParenthesis(int n) {
    List<String> list = new ArrayList<String>();
    dfs(list,"(", 1, 0, n);
    return list;
}

public void dfs(List<String> list, String temp, int open, int close, int n) {
    if (temp.length() == n * 2) {
        list.add(temp);
        return;
    }
    if (open < n) dfs(list, temp + "(", open + 1, close, n);
    if (open > close) dfs(list, temp + ")", open, close + 1, n);
}

解法2:这类型问题的常见解法。

Last updated