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:
"((()))", "(()())", "(())()", "()(())", "()()()"
递归,记录左右括号还剩几个,同时检测当前是否合法
public class Solution {
//Time: O(2^n)
public ArrayList<String> generateParenthesis(int n) {
ArrayList<String> res = new ArrayList<String>();
generate("", n, n, res);
return res;
}
private void generate(String cur, int left, int right, ArrayList<String> res) {
if (left > right || left < 0 || right < 0) {
return;
}
if (left == 0 && right == 0) {
res.add(cur);
return;
}
generate(cur + "(", left - 1, right, res);
generate(cur + ")", left, right - 1, res);
}
}
No comments:
Post a Comment