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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • softmax损失函数理解「建议收藏」

    softmax损失函数理解「建议收藏」softmaxsoftmax的定义假设有一个数组V,ViVi表示V中的第i个元素,那么这个元素的softmax值为:SoftmaxLayer和SoftmaxLossLayersoftmaxLayersoftmax实际上就是logistic的扩展,后者只能二分类,前者则能多分类,实际上都是返回每一类的概率值。在caffe里面softmax的实现分为以下几步(加入输入到softmax里面…

  • 数据库习题及答案5

    数据库习题及答案5模拟测验1一、1 2 3 4 5 6 7 8 9 10A D C c D A C A A C一、选择题(在每个小题四个备选答案中选出一个正确答案,填在题末的括号中)(本大题共10小题,每小题2分,总计20分)()是位于用户与操作系统之间的一层数据管理软件,它属于系统软件,它为用户或应用程序提供访问数据库的方法。数据库在建立、使用和维护时由其统一管理、统一控制。A.DBMSB.DBC.DBSD.DBA下列四项中,不属于SQL2005实用程序的是()。A.对象资源管理器B.查询分析.

  • kettle中实现动态SQL查询

    kettle中实现动态SQL查询详细说明kettle中两者方式实现动态查询,分别是占位符和变量方式,示例使用H2数据库,方便学习。

  • matlab randint,Matlab的randint函数用法「建议收藏」

    RANDINTGeneratematrixofuniformlydistributedrandomintegers.OUT=RANDINTgeneratesa”0″or”1″withequalprobability.OUT=RANDINT(M)generatesanM-by-Mmatrixofrandombinarynumbers.”0″an…

  • angularjs子组件向父组件传值_react子组件传值

    angularjs子组件向父组件传值_react子组件传值Angular父组件给子组件传值的方法与注意事项

  • 微型计算机的主要因素,微型计算机的性能主要取决于( )。

    微型计算机的主要因素,微型计算机的性能主要取决于( )。【单选题】运用移动平均线研判股价趋势时,股价在一段时间下跌后,若短期均线开始上翘,继而穿越长期均线,形成:【单选题】在完成高度保密和紧急任务时往往不适用的领导方式是()【判断题】汽油和柴油发动机的负荷特性区别在于调节方式不同,汽油机属于质调节,柴油机属于量调节【判断题】为了让烙铁头充分接触焊点,焊接时可适当施加压力。【单选题】按构成空间视线限制的方向性可将植物构成空间分为水平空间和()…

发表回复

您的电子邮箱地址不会被公开。

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