类似这类题目想到用递归方法进行解决。
解题思路:括号对的合法序列,已经插入的左括号的数目大于等于右括号的数目。
(1)插入左括号:剩余的括号中,还有左括号;
(2)插入右括号:剩余的括号中,右括号的数目大于左括号的数目;
代码:
public class Parentheses {
public static void printPar(int l, int r, char[] str, int count){
if(l<0 || r<l) return;
if(l==0&&r==0){
System.out.println(str);
}else{
if(l>0){
str[count]='(';
printPar(l-1, r, str, count+1);
}
if(r>l){
str[count]=')';
printPar(l, r-1, str, count+1);
}
}
}
public static void main(String[] args){
int count = 4;
char str[] = new char[count*2];
printPar(count, count, str, 0);
}
}结果如下:
(((())))
((()()))
((())())
((()))()
(()(()))
(()()())
(()())()
(())(())
(())()()
()((()))
()(()())
()(())()
()()(())
()()()()

本文通过递归方法探讨了生成括号序列的问题,详细解释了如何确保括号对的合法性,即左括号数量始终不少于右括号数量,并提供了实现代码。展示了通过递归调用来生成一系列合法括号序列的过程。

469

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



