22. 括号生成

题目:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例:

输入:n = 3
输出:[
"((()))",
"(()())",
"(())()",
"()(())",
"()()()"
]

代码:
class Solution { //回溯法,解集/最优解
public List generateParenthesis(int n) {
StringBuilder sb=new StringBuilder();
List list=new ArrayList();
backRrack(1,n,sb,list);
return list;
}

public static void backRrack(int t,int n,StringBuilder asb,List<String> alist){  //回溯求解
    if(t>2*n){
         alist.add(asb.toString());
    }
    else{           
         //左括号进去
          asb.append('(');
          if(isMatchs(asb,n)){
            backRrack(t+1,n,asb,alist);                
          }
          asb.deleteCharAt(asb.length()-1); 
         //右括号进去
          asb.append(')');
          if(isMatchs(asb,n)){
            backRrack(t+1,n,asb,alist);
          }
          asb.deleteCharAt(asb.length()-1);
        }
    }        


public static boolean  isMatchs(StringBuilder asb,int n){ //判断放进去是否为可行解
 if(asb.charAt(0)==')'){return false;}
 int j=0,temp=0;
 for(int i=0;i<asb.length()&&j>=0;i++){
     if(asb.charAt(i)=='('){
     j++;
     temp++;}
     else{
       j--;
     }      
 }
 if(j<0||temp>n){return false;}
 if(j==0){return true;}
 return true;
}

}

posted @   堤苏白  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示