力扣22. 括号生成(java 回溯法)

Problem: 22. 括号生成

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

我们首先要知道,若想生成正确的括号我们需要让右括号去适配左括号,在此基础上我们利用回溯去解决此题目

1.题目给定n个括号,即当回溯决策路径长度等于 2 n 2n 2n时,我们结束回溯;
2.若想选择出正确的括号,我们先要确定
左括号*,即要求左括号小于给定的数量n,同时已经使用的右括号要小于已经使用的左括号,所以我们可以定义已使用的左括号数量lestUsed已经使用的右括号数量rightUsed,在这两种情况下展开回溯;

解题方法

1.定义结果集合result,决策路劲path(char类型数组,初始化长度为 2 n 2n 2n);
2.编写并调用回溯函数,初始化决策阶段为0;

2.1当决策路径长度等于 2 n 2n 2n时,将当前的决策路径添加到结果集合中,并返回;
2.2当leftUsed小于n时我们将当前决策路径位置上添上**(,并递归下一阶段(leftUsed 要加一,决策阶段加一)
2.3当
rightUsed小于leftUsed时我们将当前决策路径位置上添上,并递归下一阶段(rightUsed 要加一,决策阶段加一)
2.4由于定义的决策路径为一个char类型的数组,所以我们不用显示的
恢复当前的决策路径状态**,数组在递归调用中会覆盖上一个

复杂度

时间复杂度:

O ( 1 n + 1 ( 2 n n ) ) O(\frac{1}{n+1}\binom{2n}{n}) O(n+11(n2n))

空间复杂度:

O ( 4 n n ) O\left(\frac{4^n}{\sqrt{n}}\right) O(n 4n)

Code

class Solution {//Result listprivate List<String> result = new ArrayList<>();/*** Get all parentheses generated** @param n The num of parenthesis* @return List<String>*/public List<String> generateParenthesis(int n) {//Decision Pathchar[] path = new char[2 * n];backtrack(n, 0, 0, 0, path);return result;}/*** Use backtracking to get all parentheses generated** @param n         The num of parenthesis* @param leftUsed  The number of left parentheses used* @param rightUsed The number of right parentheses used* @param k         Decision stage* @param path      Decision path*/private void backtrack(int n, int leftUsed, int rightUsed, int k, char[] path) {//End conditionif (k == 2 * n) {result.add(String.valueOf(path));return;}//The leftUsed less than nif (leftUsed < n) {path[k] = '(';backtrack(n, leftUsed + 1, rightUsed, k + 1, path);}//The rightUsed less than leftUsedif (rightUsed < leftUsed) {path[k] = ')';backtrack(n, leftUsed, rightUsed + 1, k + 1, path);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/277446.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 + ts 防抖指令,节流指令,复制指令

vue3 ts 自定义指令 防抖指令&#xff0c;节流指令&#xff0c;复制指令 本文使用了 element-ui , element-plus 官网 源文件 https://admin.spicyboy.cn/#/directives/debounceDirect 新建 copy.ts 文件 &#xff08;复制指令&#xff09; import type { Directive, Di…

深入分析ClassLocader工作机制

文章目录 一、ClassLoader简介1. 概念2. ClassLoader类结构分析 二、ClassLoader的双亲委派机制三、Class文件的加载流程1. 简介2. 加载字节码到内存3. 验证与解析4. 初始化Class对象 四、常见加载类错误分析1. ClassNotFoundException2. NoClassDefFoundError3. UnsatisfiledL…

系统的安全性设计

要设计一个安全的系统&#xff0c;除了要了解一些前面讲到的常用的保护手段和技术措施外&#xff0c;还要对系统中可能出现的安全问题或存在的安全隐患有充分的认识&#xff0c;这样才能对系统的安全作有针对性的设计和强化&#xff0c;即“知己知彼&#xff0c;百战百胜”。 下…

NO-IOT翻频,什么是翻频,电信为什么翻频

1.1 翻频迁移最终的目的就是减少网络的相互干扰&#xff0c;提供使用质量. 1.2 随着与日俱增的网络规模的扩大&#xff0c;网内干扰已成了影响网络的质量标准之一&#xff0c;为了保障电信上网体验&#xff0c;满足用户日益增长的网速需求,更好的服务客户&#xff0c;电信针对…

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解)

背景 在项目过程中&#xff0c;有时候你需要调用非C#编写的DLL文件&#xff0c;尤其在使用一些第三方通讯组件的时候&#xff0c;通过C#来开发应用软件时&#xff0c;就需要利用DllImport特性进行方法调用。本篇文章将引导你快速理解这个调用的过程。 步骤 1. 创建一个CSharp…

JMeter下载与安装

文章目录 前言一、安装java环境&#xff08;JDK下载与安装&#xff09;二、JMeter下载三、JMeter安装1.解压缩2.配置环境变量 四、JMeter启动&#xff08;启动成功则代表JMeter安装成功&#xff09;五、JMeter汉化&#xff08;将JMeter修改成中文&#xff09;1.方法一&#xff…

HTTP 301错误:永久重定向,大勇的冒险之旅

大家好&#xff0c;我是大勇&#xff0c;一个喜欢冒险的程序员。今天&#xff0c;我要和大家分享一个我在互联网世界中的冒险故事——如何处理HTTP 301错误&#xff1a;永久重定向。 那天&#xff0c;我像往常一样&#xff0c;打开我的代码编辑器&#xff0c;准备开始一天的工…

Python学习开发mock接口

#1.测试为什么要开发接口&#xff1f; 1)在别的接口没有开发好的时候, mock接口(模拟接口) 2)查看数据, 避免直接操作数据库 #2.开发接口的顺序 1)安装flask flask是一个轻量级开发框架 pip install flask 2)开发一个接口 开发步骤&#xff1a; 1.实例化一个服务server:f…

状态的一致性和FlinkSQL

状态一致性 一致性其实就是结果的正确性。精确一次是指数据有可能被处理多次&#xff0c;但是结果只有一个。 三个级别&#xff1a; 最多一次&#xff1a;1次或0次&#xff0c;有可能丢数据至少一次&#xff1a;1次或n次&#xff0c;出错可能会重试 输入端只要可以做到数据重…

黑马点评04集群下的并发安全

实战篇-08.优惠券秒杀-集群下的线程并发安全问题_哔哩哔哩_bilibili 为了应对高并发&#xff0c;需要把项目部署到多个机器构成集群&#xff0c;所以需要配置nginx。 1.如何模拟集群 通过idea的ctrl d修改配置&#xff0c;实现多个tomcat运行模拟集群 然后在nginx上配置节点&…

【产品经理】产品专业化提升路径

产品专业化就是上山寻路&#xff0c;梳理一套作为产品经理的工作方法。本文作者从设计方法、三基座、专业强化、优秀产品拆解、零代码这五个方面&#xff0c;对产品经理的产品专业化进行了总结归纳&#xff0c;一起来看一下吧。 产品专业化就是上山寻路&#xff0c;梳理一套作为…

MySQL——表的约束

目录 一.表的约束 二.空属性 ​编辑三.默认值 四.列描述 五.主键 1.主键 2.符合主键 六.自增长 七.唯一键 八.外键 一.表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&…