Generate Parentheses
问题简介:
给定n对括号,编写一个函数来生成格式正确的括号的所有组合.
举例:
给定n = 2,解集是:
[
“()()”,
“(())”
]
给定n = 3,解集是:
[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
解法一:
通过递归将所有符合的情况添加到集合中,限制条件:
1.左括号的数量最大为n
2.当前字符串中的右括号数量不能大于左括号
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList();
backtrack(ans, "", 0, 0, n);
return ans;
}
public void backtrack(List<String> ans, String cur, int open, int close, int max){
if (cur.length() == max * 2) {
ans.add(cur);
return;
}
if (open < max)
backtrack(ans, cur+"(", open+1, close, max);
if (close < open)
backtrack(ans, cur+")", open, close+1, max);
}
}
解法二:
因为n个括号共2n个字符,也就是索引0到2n-1内都为有效的括号即可,通过递归,将n=3的情况变为n=2加上一个括号,通过层层递归实现
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ans = new ArrayList();
if (n == 0) {
ans.add("");
} else {
for (int c = 0; c < n; ++c)
for (String left: generateParenthesis(c))
for (String right: generateParenthesis(n-1-c))
ans.add("(" + left + ")" + right);
}
return ans;
}
}
小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海