题目描述:
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
解题分析:
这类题一般都要用递归的方法来解决。需要设两个集合类分别存储待匹配的(,)的个数。
这里需要明白一点:当待匹配的(的个数永远不小于待匹配的)的个数时只能匹配(,否则会导致错误。(可以自己在纸上试一下就好理解了),其余情况可以考虑匹配( 和)两种情况下可能的结果。
具体代码:
1 public class Solution { 2 public static List<String> generateParenthesis(int n){ 3 List<String> result = new ArrayList<String>(); 4 List<Character> array1=new LinkedList<Character>(); 5 List<Character> array2=new LinkedList<Character>(); 6 char[] array = new char[2*n]; 7 for(int i=0;i<n;i++){ 8 array1.add(‘(‘); 9 array2.add(‘)‘); 10 } 11 fun1(array1,array2,result,array,0); 12 return result; 13 } 14 public static void fun1(List<Character> array1,List<Character> array2,List<String> result,char[] array,int index){ 15 if(index==array.length-1){ 16 if(array1.size()==0&&array2.size()==1){ 17 array[index]=array2.remove(0); 18 result.add(new String(array)); 19 array[index]=‘ ‘; 20 array2.add(‘)‘); 21 return; 22 } 23 else{ 24 return; 25 } 26 } 27 //只能填‘(‘ 28 if(array1.size()>=array2.size()){ 29 array[index]=array1.remove(0); 30 fun1(array1,array2,result,array,index+1); 31 array[index]=‘ ‘; 32 array1.add(‘(‘); 33 } 34 else{ 35 //先试‘(‘ 36 if(array1.size()>0){ 37 38 array[index]=array1.remove(0); 39 fun1(array1,array2,result,array,index+1); 40 array[index]=‘ ‘; 41 array1.add(‘(‘); 42 } 43 //再试‘)‘ 44 array[index]=array2.remove(0); 45 fun1(array1,array2,result,array,index+1); 46 array[index]=‘ ‘; 47 array2.add(‘)‘); 48 } 49 50 } 51 }
时间: 2024-10-13 00:55:29