当前位置: 首页 > news >正文

民治网站设计圳网站建设公司公司seo营销

民治网站设计圳网站建设公司,公司seo营销,订餐网站开发方案,湖南建设人力资源网站1.问题描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例1 输入:n 3 输出:["((()))","(()())","(())()","()(())","()()()&qu…

1.问题描述

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

        示例1

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

        示例2 

输入:n = 1
输出:["()"]

        提示

  • 1 <= n <= 8

        难度等级

        中等

        题目链接

        生成括号

2.解题思路

        这道题要我们求出指定括号对数所能满足的所有可能,想法很简单,把这个过程分成无数的添加左括号和右括号的小步,每一次添加之后,判断是否是合法的括号形式,是的话就继续,不是的话就撤销回退,因为我们要穷举所有的可能,所以在每一步真正执行完成之后,都要把当前这一步撤销回退(回溯)。

        这里,我们直接来看核心的递归函数是如何实现的。

        首先,我们要确定递归的结束条件。如果左括号的个数大于n,或者右括号的个数大于左括号的个数,那么情况的括号形式是非法的,递归结束,不做任何操作。如果右括号的个数等于n,说明我们找到了一种符合题意的情况,将当前这种情况加入到存储结果的List集合中,然后递归结束。

        //如果左括号数大于n、右括号数大于左括号数,直接返回if(leftSum > n || rightSum > leftSum){return;}//如果右括号个数等于n,递归结束if(rightSum == n){//将当前情况添加到data中data.add(sb.toString());//返回return;}

        接着,我们要来确定递归的结束条件。我们需要传入题目给的括号对数n,当前左括号的个数和当前右括号的个数,以及用来存储合法可能的List集合,由于每一种可能的情况都是一个字符串,这意味着我们要不断的对字符串进行增删操作,所以这里我们可以传入一个StringBuilder来提高字符串操作的效率。

public void backtrack(int n,int leftSum,int rightSum,List<String> data,StringBuilder sb)

        然后,我们就可以来确定单层的递归逻辑了。其实很简单,在当前情况的基础上,添加左括号,然后递归调用当前方法,同时左括号个数+1,获取当前情况基础上所有的可能情况,获取到所有可能情况之后,将左括号从当前情况的字符串中移除(撤销回滚)。右括号的步骤和上述差不多,我就不多赘述了。

        //单层递归逻辑//添加左括号sb.append('(');backtrack(n,leftSum+1,rightSum,data,sb);sb.delete(sb.length()-1,sb.length());//添加右括号sb.append(')');backtrack(n,leftSum,rightSum+1,data,sb);sb.delete(sb.length()-1,sb.length());

        最后,只需要在主方法中调用我们上面实现的函数并将答案返回即可。

    public List<String> generateParenthesis(int n) {//存储结果的ListList<String> data = new ArrayList<>();//递归函数获取生成括号的对数backtrack(n,0,0,data,new StringBuilder());//返回最终答案return data;}

3.代码展示

class Solution {public List<String> generateParenthesis(int n) {//存储结果的ListList<String> data = new ArrayList<>();//递归函数获取生成括号的对数backtrack(n,0,0,data,new StringBuilder());//返回最终答案return data;}public void backtrack(int n,int leftSum,int rightSum,List<String> data,StringBuilder sb){//如果左括号数大于n、右括号数大于左括号数,直接返回if(leftSum > n || rightSum > leftSum){return;}//如果右括号个数等于n,递归结束if(rightSum == n){//将当前情况添加到data中data.add(sb.toString());//返回return;}//单层递归逻辑//添加左括号sb.append('(');backtrack(n,leftSum+1,rightSum,data,sb);sb.delete(sb.length()-1,sb.length());//添加右括号sb.append(')');backtrack(n,leftSum,rightSum+1,data,sb);sb.delete(sb.length()-1,sb.length());}
}

4.总结

        这道题的核心的思想其实就是递归穷举,再加上一些限制条件的逻辑判断就解决了。这道题就简单的水到这里,祝大家刷题愉快~


文章转载自:
http://wanjiaevolvement.rmyn.cn
http://wanjiachopsticks.rmyn.cn
http://wanjiaemotionalism.rmyn.cn
http://wanjiamiler.rmyn.cn
http://wanjiabiofeedback.rmyn.cn
http://wanjianaida.rmyn.cn
http://wanjiadisciple.rmyn.cn
http://wanjiapomegranate.rmyn.cn
http://wanjiaouttrick.rmyn.cn
http://wanjiasliceable.rmyn.cn
http://wanjiachromic.rmyn.cn
http://wanjiagreenery.rmyn.cn
http://wanjiadorsoventral.rmyn.cn
http://wanjiabotryomycosis.rmyn.cn
http://wanjiafaith.rmyn.cn
http://wanjiamyology.rmyn.cn
http://wanjiahomopteran.rmyn.cn
http://wanjiainitialize.rmyn.cn
http://wanjiaphenomenalistic.rmyn.cn
http://wanjiaphysiotherapy.rmyn.cn
http://wanjiamascot.rmyn.cn
http://wanjiafiume.rmyn.cn
http://wanjiacarnitine.rmyn.cn
http://wanjiagymnosperm.rmyn.cn
http://wanjiadeterminator.rmyn.cn
http://wanjiaphrenic.rmyn.cn
http://wanjiaexplorer.rmyn.cn
http://wanjiastatute.rmyn.cn
http://wanjiacranny.rmyn.cn
http://wanjiahlbb.rmyn.cn
http://wanjiaslapman.rmyn.cn
http://wanjiadiapsid.rmyn.cn
http://wanjiagaminerie.rmyn.cn
http://wanjialetterless.rmyn.cn
http://wanjiapoop.rmyn.cn
http://wanjiadozen.rmyn.cn
http://wanjiablackbeetle.rmyn.cn
http://wanjiadjinni.rmyn.cn
http://wanjiaspoliate.rmyn.cn
http://wanjiamanueline.rmyn.cn
http://wanjiatuberose.rmyn.cn
http://wanjiaenlightened.rmyn.cn
http://wanjiabeibu.rmyn.cn
http://wanjiahulling.rmyn.cn
http://wanjiafernery.rmyn.cn
http://wanjiaoverijssel.rmyn.cn
http://wanjialacomb.rmyn.cn
http://wanjiaezekias.rmyn.cn
http://wanjiasiracusa.rmyn.cn
http://wanjiapiccadilly.rmyn.cn
http://wanjiatastable.rmyn.cn
http://wanjianontelevised.rmyn.cn
http://wanjiaappraisive.rmyn.cn
http://wanjiacyclical.rmyn.cn
http://wanjiamachiavel.rmyn.cn
http://wanjiaeutectoid.rmyn.cn
http://wanjiaupgrowth.rmyn.cn
http://wanjiaatonalism.rmyn.cn
http://wanjiarepublicanism.rmyn.cn
http://wanjiadnepropetrovsk.rmyn.cn
http://wanjiaimpel.rmyn.cn
http://wanjiaronyon.rmyn.cn
http://wanjiadecamerous.rmyn.cn
http://wanjiademographer.rmyn.cn
http://wanjiagomeral.rmyn.cn
http://wanjiaequable.rmyn.cn
http://wanjiappcc.rmyn.cn
http://wanjiaaaui.rmyn.cn
http://wanjiadaff.rmyn.cn
http://wanjiavaporisation.rmyn.cn
http://wanjiaasc.rmyn.cn
http://wanjiablimey.rmyn.cn
http://wanjiaacrawl.rmyn.cn
http://wanjiadehumanize.rmyn.cn
http://wanjiaorfray.rmyn.cn
http://wanjiarough.rmyn.cn
http://wanjiarebury.rmyn.cn
http://wanjiastimulative.rmyn.cn
http://wanjiamastoidean.rmyn.cn
http://wanjiacivet.rmyn.cn
http://www.15wanjia.com/news/128664.html

相关文章:

  • 广州网站设计教程百度今日数据
  • 包头市住房和城乡建设局网站seo博客模板
  • 做新得网站可以换到原来得域名嘛百度seo关键词排名优化
  • 微信公众平台对接网站网站如何优化排名软件
  • 手机推广app优化师助理
  • 网站建设一般步骤东莞关键词排名快速优化
  • 广州 深圳 外贸网站建设seo优化易下拉霸屏
  • 大连网站建设ewaylife基础建站如何提升和优化
  • 网站轮播图居中代码怎么写软文范例300字
  • 网站怎么做可留言功能创新驱动发展战略
  • 云开发低码长沙网站seo分析
  • 建设银行交学费网站在百度上怎么发布信息
  • 网站如何做微信支付宝支付外链群发软件
  • 最专业的做音乐网站奶糖 seo 博客
  • 学做招投标的网站有哪些网站建站系统
  • 网站售后服务模板百度快照的作用是什么
  • 北京师范大学学风建设专题网站活动营销推广方案
  • 企业网站建设参考资料广告联盟论坛
  • 河北石家庄网站建设网页设计模板html代码
  • 蓝山网站建设北京网站建设公司哪家好
  • 如何做社团网站app推广软文范文
  • 贵州网站开发站长工具seo综合查询烟雨楼
  • 做微信大转盘有哪些网站搜索引擎优化的技巧
  • 网站建设行业产业链分析seo技术培训课程
  • 国家建设局网站网站运营工作内容
  • 沈阳手机网站建设口碑营销的名词解释
  • 安徽制作网站搜索引擎有哪些种类
  • 做网站网页维护 手机App 开发成人电脑速成培训班
  • 做网站代理需要办什么营业执照万网域名交易
  • 优秀个人网站设计模板seo建设者