题目描述:

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

解题分析:

这类题一般都要用递归的方法来解决。需要设两个集合类分别存储待匹配的(,)的个数。

这里需要明白一点:当待匹配的(的个数永远不小于待匹配的)的个数时只能匹配(,否则会导致错误。(可以自己在纸上试一下就好理解了),其余情况可以考虑匹配( 和)两种情况下可能的结果。

具体代码:

 public class Solution {
public static List<String> generateParenthesis(int n){
List<String> result = new ArrayList<String>();
List<Character> array1=new LinkedList<Character>();
List<Character> array2=new LinkedList<Character>();
char[] array = new char[2*n];
for(int i=0;i<n;i++){
array1.add('(');
array2.add(')');
}
fun1(array1,array2,result,array,0);
return result;
}
public static void fun1(List<Character> array1,List<Character> array2,List<String> result,char[] array,int index){
if(index==array.length-1){
if(array1.size()==0&&array2.size()==1){
array[index]=array2.remove(0);
result.add(new String(array));
array[index]=' ';
array2.add(')');
return;
}
else{
return;
}
}
//只能填'('
if(array1.size()>=array2.size()){
array[index]=array1.remove(0);
fun1(array1,array2,result,array,index+1);
array[index]=' ';
array1.add('(');
}
else{
//先试'('
if(array1.size()>0){ array[index]=array1.remove(0);
fun1(array1,array2,result,array,index+1);
array[index]=' ';
array1.add('(');
}
//再试')'
array[index]=array2.remove(0);
fun1(array1,array2,result,array,index+1);
array[index]=' ';
array2.add(')');
} }
}

最新文章

  1. 免费开源的DotNet任务调度组件Quartz.NET(.NET组件介绍之五)
  2. Parcelable序列化的使用,关于intent.getParcelableArrayExtra的使用
  3. BZOJ 1078: [SCOI2008]斜堆
  4. android之handle
  5. 简单解释CDATA
  6. C#完成最简单的WebService创建及使用
  7. JavaScript入门
  8. 数组越界保护与消息传递black机制
  9. 解析wamp的php.ini设置不生效的原因
  10. CodeForces Round #279 (Div.2)
  11. android 国内sdk下载地址及代理, android 环境搭建
  12. sublime text插件
  13. iOS 获取当前时间以及计算年龄(时间差)
  14. 常用linux命令及其设置
  15. python测试框架nose
  16. Kotlin实现《第一行代码》案例“酷欧天气”
  17. d01
  18. console控制台的小问题
  19. What I am concerned about
  20. js算法初窥06(算法模式03-函数式编程)

热门文章

  1. [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测
  2. C++ string类析构报错
  3. CF821 E. Okabe and El Psy Kongroo 矩阵快速幂
  4. Python学习笔记(三十九)— 内置模块(8)XML基础
  5. SDUT 3918
  6. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)
  7. C# 操作资源文件
  8. js-打地鼠游戏开发
  9. sniffer简单使用
  10. python基础之常用的高阶函数