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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 单片机最小系统的通俗易懂讲解

    单片机最小系统的通俗易懂讲解我是一名单片机工程师,下面的讲解你参考一下.51单片机共有40只引脚.下面这个就是最小系统原理图,就是靠这四个部分,这个单片机就可以运行起来了.(看下面的数字标记,1234)我们来一,一讲解一下:1第一部分:电源组(标记为1的部分)40脚接电源5V(右上角),20脚接电源负极(左下角),在单片机里面,负极也可以叫GND或者”地”,我们在单片机的应用中,习惯说负极为”地”,上面GND就…

    2022年6月5日
    45
  • 交换机LLDP模块

    交换机LLDP模块一:

    2022年5月18日
    44
  • 系统可靠性计算「建议收藏」

    系统可靠性计算「建议收藏」系统可靠性计算是软考考试的一个重点,近些年几乎每次考试都会考到,但这个知识点的难度不高,了解基本的运算公式,即可轻松应对。可靠性计算主要涉及三种系统,即串联系统、并联系统和冗余系统,其中串联系统和并联系统的可靠性计算都非常简单,只要了解其概念,公式很容易记住。冗余系统要复杂一些。在实际的考试当中,考得最多的就是串并混合系统的可靠性计算。所以要求我们对串联系统与并联系统的特点有基本的了解,对其计算…

    2022年7月26日
    8
  • java写入文件

    java写入文件

    2021年7月16日
    68
  • 4个基本不等式的公式高中_基本不等式公式四个叫什么名字「建议收藏」

    4个基本不等式的公式高中_基本不等式公式四个叫什么名字「建议收藏」展开全部叫做平方平均数、算术平均数、几何平均数、调和平均数1.平方平均数:又名均方根(RootMeanSquare),英文62616964757a686964616fe78988e69d8331333431376632缩写为RMS。它是2次方的广义平均数的表达式,也可称为2次幂平均数。英文名为,一般缩写成RMS。2.算术平均数:又称均值,是统计学中最基本、最常用的一种平均指标,分为简单算术平均…

    2022年4月29日
    160
  • 程序员面试宝典——第6章

    程序员面试宝典——第6章1 宏定义 define 基本知识 defineSECOND PER YEAR 60 60 24 365 UL 宏定义只是定义 不牵扯计算 defineMIN A B A lt B A B 2 constint nbsp b 500 constint a amp b const 修饰指针所指向的变量 指针的内容为常量 intconst a amp b const 修

    2025年8月18日
    3

发表回复

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

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