类似这类题目想到用递归方法进行解决。
解题思路:括号对的合法序列,已经插入的左括号的数目大于等于右括号的数目。
(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);
}
}
结果如下:
(((())))
((()()))
((())())
((()))()
(()(()))
(()()())
(()())()
(())(())
(())()()
()((()))
()(()())
()(())()
()()(())
()()()()