LeetCode刷题笔记-回溯法-括号生成

LeetCode刷题笔记-回溯法-括号生成

题目描述:

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses

分析:

方法2:回溯法

 1、对于每个位置都有两种选择左括号,和有括号。

   2、对于每个位置都依此添加左括号,和有括号,若是不符合条件,立马停止当前分支的的继续前行。

方法1,是用的是贪心法,

  1、在n=3的是在n=2的基础上,分别在左侧,右侧,外侧添加括号。

 java实现

class Solution {
    //特此声明:我没错,辣鸡后台。我就没错!!!写此注释,以表抗议!!
    public List<String> generateParenthesis2(int n) {  //这是方法1,,,用的可能是贪心算法。。
        List<String> list = new ArrayList<>();
        if (n<1)
            return list;

        list.add("()");
        if (n==1)
            return list;

        String str="()";
        String s="";
        for (int i=2;i<=n;i++) {
            int j=0;
            int list_len= list.size();  //先算好,别他娘的放到循环中,哼!!!!!!

            int k=j;
            for (j = 0; j < list_len; j++) {  //把list所有元素取出来,每个分别处理一遍,相对于队。

                s = list.get(k);
                String left = "()" + s;
                String mid = "(" + s + ")";
                String right = s + "()";
                list.add(mid);
                list.add(left);
                if (!left.equals(right)) {
                    list.add(right);
                }
                list.remove(s);
            }
        }
            return list;
    }
    
    public List<String> generateParenthesis(int n){
        List<String> result=new ArrayList<>();
        gen(result,"",n,n);
        return result;
    }

    public void gen(List<String> result,String str,int l,int r){
        if (l==0 && r==0){
            result.add(str);
            return;
        }
        if( l>r || l<0 || r<0)
            return ;
        String str2=new String(str); *****这波操作,看清楚喽,每个位置就两种情况,就不写for循环了
        gen(result,str+="(",l-1,r);
        gen(result,str2+=")",l,r-1);

    }
}

 

转载于:https://www.cnblogs.com/sqchao/p/11073479.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100852.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SqlBulkCopy – The given value of type String from the data source cannot be converted to type

    SqlBulkCopy – The given value of type String from the data source cannot be converted to typeSqlBulkCopy-ThegivenvalueoftypeStringfromthedatasourcecannotbeconvertedtotypeofthespecifiedtargetcolumn针对使用C#SqlBulkCopy对象遇到的问题总结1.批量插入excel数据遇到的类型转换问题2.去除非数据行以下是对应的解决办法及代码1….

    2022年7月20日
    16
  • PGN详解_PGN行情

    PGN详解_PGN行情

    2022年4月19日
    37
  • 软件工程期末试题及答案(史上最全)

    软件工程期末试题及答案(史上最全)软件工程期末试题及答案1.开发瀑布模型中的软件定义时期各个阶段依次是:(B)A)可行性研究,问题定义,需求分析。B)问题定义,可行性研究,需求分析。C)可行性研究,需求分析,问题定义。D)以上顺序都不对。(软件开发时期:概要设计、详细设计、软件实现、软件测试)2.可行性研究主要从以下几个方面进行研究:(A)A)技术可行性,经济可行性,操作可行性。B)技术可行性,经济可行性,系统可行性。C)经济可行性,系统可行性,操作可行性。D)经济可行性,系统可行性,时间可行性。..

    2025年12月2日
    5
  • 宝塔安装mysql失败_手机如何卸载宝塔防火墙

    宝塔安装mysql失败_手机如何卸载宝塔防火墙先用宝塔自带卸载宝塔软件环境默认是不卸载得mysql先停止服务,再删除服务apache先停止服务,再删除服务然后安装新的宝塔即可

    2025年9月22日
    4
  • 更新Git工具到最新版本「建议收藏」

    Ubuntu16.04默认的软件源目前最多只能更新到2.7.4版本,而官方早就已经迭代到2.20.1了,差十几个版本号。新版的git命令工具增加了很多新功能,比如分支HEAD高亮等,相比以前,可以更加方便地脱离图形化界面操作。1、首先查看一下自己的版本是不是低于最新版:git–version2、若不是,添加Git官方的软件源:sudoadd-apt-repositorypp…

    2022年4月9日
    93
  • xml分页查询_sql server 分页

    xml分页查询_sql server 分页namespaceAdmin\Controller;useCommon\Controller\AdminController;useLib\Utils;classBusinessControllerextendsAdminController{  publicfunction__construct()

    2022年9月1日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号