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


相关推荐

  • idea2021.12永久激活-激活码分享

    (idea2021.12永久激活)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    133
  • 实现阿里云DDNS解析[通俗易懂]

    实现阿里云DDNS解析[通俗易懂]我有三种设备,synologyopenwrtraspberryopenwrt1,首先,我在openwrt上实现,这有分为二种方法,其实也是一种方法,1,下载ddns-scripts_aliyun_1.0.0-1_all.ipk这个安装包,直接安装,在app-ddns里面就可以看到阿里去的服务商了,然后输入用户名,密码就可以了。2,使用自定义的脚本也行,raspberrysynology…

    2022年6月7日
    31
  • 鲜为人知的QQ自动强制加好友代码

    是的,你也许见过强行聊天的代码: tencent://Message/?Uin=574201314&amp;websiteName=www.oicqzone.com&amp;Menu=yes 但是你应该不知道,还有强行加好友的代码:tencent://AddContact/?fromId=45&amp;fromSubId=1&amp;subcmd=all&amp;uin…

    2022年4月9日
    2.3K
  • HashMap数据结构及其一些方法

    HashMap数据结构及其一些方法1.HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。     数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

    2022年5月19日
    37
  • 电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)

    电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)电驴上的丰富资源让我们眼馋,尤其是一些国外的大片资源。但是往往出现不能下载的情况。其实原因就是出在电驴服务器列表上,我们常用的电驴服务器列表都是www.emule.org.cn提供的他并不包含一些国外的服务器列表,所以就引起了某些国外资源下载不了。其实只要大家更新一下电驴服务器列表就可以解决这个小问题。上哪去找电驴服务器列表呢?当然有网站为我们做好了服务,ed2k.2x4u.de就是这样的一个网站…

    2022年6月22日
    70
  • wireshark抓包分析[通俗易懂]

    wireshark抓包分析[通俗易懂]TCP协议首部:分析第一个包:源地址:我自己电脑的IP,就不放上来了Destination:222.199.191.33目的地址TCP:表明是个TCP协议Length:66表明包的长度

    2022年7月2日
    46

发表回复

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

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