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)
class Solution {
public List<String> generateParenthesis(int n) {
List<String> list = new ArrayList<>();
backtrack(list,"",0,0,n);
return list;
}
public void backtrack(List<String> list,String cur,int open,int close,int max){
if(cur.length() == max * 2){
list.add(cur);
return;
}
if(open < max){
backtrack(list,cur+"(",open + 1,close,max);
}
if(close < open){
backtrack(list,cur+")",open,close + 1,max);
}
return ;
}
}
2)
class Solution {
public List<String> generateParenthesis(int n) {
List<String> ret = new ArrayList<>();
if (n == 0) {
ret.add("");
} else {
for (int i = 0; i < n; i++) {
for (String left: generateParenthesis(i)) {
for (String right: generateParenthesis(n - i - 1)) {
ret.add("(" + left + ")" + right);
}
}
}
}
return ret;
}
}
第一个方法中使用了回溯
本文深入探讨了生成所有合法括号组合的算法实现,通过两种方法:回溯法和递归分解,详细解释了如何根据输入的整数n生成所有可能的合法括号组合。第一种方法利用回溯策略,通过递归调用自身,逐步构建括号字符串,并检查其合法性;第二种方法采用递归分解思想,将问题分解为子问题,通过递归调用自身解决子问题,再进行组合得到最终结果。

被折叠的 条评论
为什么被折叠?



