【Leetcode】Generate Parent

来源:互联网 发布:搜狗五笔 mac 编辑:程序博客网 时间:2024/06/14 22:48

【题目】

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:

"((()))", "(()())", "(())()", "()(())", "()()()"


【分析】

其实我觉得这种题,我一遇到就感觉完全懵了。。

但是其实写几个例子,就能看出规律

1 ()
2 ()(),(())
3 ()()(), (())(), (()()), ()(()), ((()))

规律是这样的 ,假设我们已经产生了n-1对括号的所有组合,那么在这个基础上我们可以产生所有的n对括号的组合,我们把一个(放在每个n-1对括号组合的开头,然后在每个每一个括号配好对的位置插入一个)。这样我们就产生了一个n对括号的组合。

For 2, it should place one "()" and add another one insert it but none tail it,

'(' f(1) ')' f(0)

or add none insert it but tail it by another one,

'(' f(0) ')' f(1)

Thus for n, we can insert f(i) and tail f(j) and i+j=n-1,

'(' f(i) ')' f(j)

【代码】

public List<String> generateParenthesis(int n) {    List<String> result = new ArrayList<String>();    if (n == 0) {        result.add("");    } else {        for (int i = n - 1; i >= 0; i--) {            List<String> insertSub = generateParenthesis(i);            List<String> tailSub = generateParenthesis(n - 1 - i);            for (String insert : insertSub) {                for (String tail : tailSub) {                    result.add("(" + insert + ")" + tail);                }            }        }    }    return result;}


0 0
原创粉丝点击