题目:
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:
"((()))", "(()())", "(())()", "()(())", "()()()"
对于第k个元素,考虑以下两种情况:
前k - 1个元素中‘(’出现次数小于n,第k个元素可以是')'。
前k - 1个元素中')'出现的次数小于'(',第k个元素可以是')'。
代码:
public void recursiveGenerateParenthesis(ArrayList<String> result, String s, int n, int leftSymbolNum, int rightSymbolNum) {
if (leftSymbolNum == n && rightSymbolNum == n)
result.add(s);
if (leftSymbolNum < n) {
s = s + '(';
recursiveGenerateParenthesis(result, s, n, leftSymbolNum + 1, rightSymbolNum);
s = s.substring(0, s.length() - 1);//把加入的‘(’再去掉,以便下面的语句运行时保持s的不变
}
if (rightSymbolNum < leftSymbolNum) {
s = s + ')';
recursiveGenerateParenthesis(result, s, n, leftSymbolNum, rightSymbolNum + 1);
}
}
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> res = new ArrayList<String>();
recursiveGenerateParenthesis(res, "", n, 0, 0);
return res;
}