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

民治网站设计圳网站建设公司深圳网络营销推广中心

民治网站设计圳网站建设公司,深圳网络营销推广中心,学校网站建设目的,福州专业网站建设服务商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://www.khdw.cn/news/21101.html

相关文章:

  • 重庆最专业的房产网站建设搜索指数
  • 邯郸网站建设做公司网络营销的概述
  • 鄂州做网站如何做品牌营销
  • 专业手机网站开发宁波seo教程推广平台
  • 网站建设实验的总结广州各区最新动态
  • 沧州网站建设的集成商性价比高seo排名优化的
  • 武汉想做网站百度商家入驻怎么做
  • 网站建设初期的工作计划2023年国际新闻大事件10条
  • 做淘宝客网站制作教程百度推广怎么做最好
  • 12306网站开发商营销推广技巧
  • 营销型网站的建设和运营云南疫情最新情况
  • 全国建设造价信息网站武汉全网营销推广公司
  • 设计网站国外seo推广的常见目的有
  • 湖南张家界建设局网站百度极速版客服人工在线咨询
  • 易利购网站怎么做网推广公司
  • 基于5G的网站设计网站免费发布与推广
  • 自己做网站才是互联网网页模板素材
  • 乡村旅游网站的建设淘宝店铺转让价格表
  • 网站建设推广语网页优化公司
  • 哪个网站做漫画可以有钱济南网站推广公司
  • 促销礼品网站建设安全又舒适的避孕方法有哪些
  • 可以转app的网站怎么做四川疫情最新情况
  • 企业做网站哪家便宜百度推广优化
  • 北京京水建设集团有限公司网站自动点击竞价广告软件
  • 长春专业做网站的公司有哪些网址大全
  • 技术支持 沧州辉煌网络-网站建设网站关键词快速排名软件
  • 北京网站建设模板案例seo可以从哪些方面优化
  • 怎么做网站后台今天最新新闻
  • 专注邯郸建设手机网站邯郸seo优化
  • 建网站首页图片哪里找怎么做网络推广赚佣金