22括号生成

看题目描述

这样的话,首先返回的东西是一个列表<String>
看到有关括号匹配括号生成我们自然而然想到了,栈
Stack<Character>

n>=1 <=8所以我们不需要考虑栈为空的可能

那么思路如下,如果括号是左括号,丢进去,然后如果是又括号,那么就要考虑前面,那么可以用到stack的push和pop方法

首先它题目里面只给我们一个n然后那么我们栈空间需要2n

然后所有可能也就是我们需要去遍历C2n n

n=1 遍历 2次

n=2 遍历 6次

...高中数学基本问题

排列组合

但是在java里面并没有这个样的函数,至少我还不知道

那么我们就考虑用递归

但是这个思路好像有点麻烦,还要鉴权

新的思路是这样的

这个题目的鉴权条件没那么复杂

根本上只需要左括号数量大于等于右括号即可

那么这种

((()))

Java 复制代码
class Solution {

    public List<String> generateParenthesis(int n) {

        List<String> list=new ArrayList<>();

        backtrack("",0,0,n);

        return list;

    }

    private void backtrack(String current,int left,int right,int max)

    {

        if(current.length()==max*2)

        {

            list.add(current);

            return;

        }

        else

        {

            if(left<max)

            {

                backtrack(current+'(',left+1,right,max);

                //加左括号的方式会到函数里面去了,如果不加左括号就会掉出来加右括号了,但是此时主程序还将继续执行,探索右括号的可能

            }

            if(right<left)

            {

                backtrack(current+')',left,right+1,max);

            }

            //这两个条件导致不会大于max*2

            //但是这两个条件一定会把所有可能返回吗?还得想想,答案是能返回的,回溯发这边

        }

    }

}

这里我出了点问题,就是把那个list去变成了局部变量所以呢

我们现在去改改

Java 复制代码
class Solution {

    List<String> list=new ArrayList<>();

    public List<String> generateParenthesis(int n) {

        backtrack("",0,0,n);

        return list;

    }

    private void backtrack(String current,int left,int right,int max)

    {

        if(current.length()==max*2)

        {

            list.add(current);

            return;

        }

        else

        {

            if(left<max)

            {

                backtrack(current+'(',left+1,right,max);

                //加左括号的方式会到函数里面去了,如果不加左括号就会掉出来加右括号了,但是此时主程序还将继续执行,探索右括号的可能

            }

            if(right<left)

            {

                backtrack(current+')',left,right+1,max);

            }

            //这两个条件导致不会大于max*2

            //但是这两个条件一定会把所有可能返回吗?还得想想,答案是能返回的,回溯发这边

        }

    }

}
相关推荐
叶小鸡20 小时前
Java 篇-项目实战-天机学堂(从0到1)-day9
java·开发语言
@#¥&~是乱码鱼啦21 小时前
Spring分层架构:Controller、Service、Mapper数据链路,IOC的真实工作意义
java·spring·架构
xieliyu.21 小时前
Java手搓数据结构:从零模拟实现无头双向非循环链表
java·数据结构·链表
薪火铺子21 小时前
SpringMVC请求处理流程源码解析(第3篇):视图渲染与异常处理
java·后端·spring
逻辑驱动的ken21 小时前
Java高频面试场景题19
java·开发语言·面试·职场和发展·求职招聘
如何原谅奋力过但无声1 天前
【灵神高频面试题合集01-03】相向双指针、滑动窗口
数据结构·python·算法·leetcode
leoufung1 天前
LeetCode 42:接雨水 —— 从“矩形法”到双指针的完整思考过程
java·算法·leetcode
小碗羊肉1 天前
【MySQL | 第十一篇】InnoDB引擎
java·数据库·mysql
Dylan的码园1 天前
Maven基础架构与整体认识
java·junit·maven
弹不出的5h3ll1 天前
Ghost Bits:高位截断如何让 Java WAF 形同虚设
java·开发语言