LeetCode 解题思路 30(Hot 100)

在这里插入图片描述

解题思路:

  1. 递归参数: 生成括号的对数 n、结果集 result、当前路径 path、左括号数 open、右括号数 close。
  2. 递归过程:
  • 当当前路径 path 的长度等于 n * 2 时,说明已经生成有效括号,加入结果集。
  • 若左括号数小于 n,将左括号加入临时字符串,递归处理字符串的下一个位置。
  • 若右括号数小于左括号数,将右括号加入临时字符串,递归处理字符串的下一个位置。

Java代码:

class Solution {public List<String> generateParenthesis(int n) {List<String> result = new ArrayList<>();backtrack(n, result, "", 0, 0);return result;}private void backtrack(int n, List<String> result, String path, int open, int close) {if (path.length() == n * 2) {result.add(path);return;}if (open < n) backtrack(n, result, path + "(", open + 1, close);if (close < open) backtrack(n, result, path + ")", open, close + 1);}
}

复杂度分析:

  • 时间复杂度: O( 4 n / √ n 4ⁿ/√n 4n/√n)。有效括号组合的数量遵循卡塔兰数,其渐近复杂度为 4 n / √ n 4ⁿ/√n 4n/√n。每个组合需要 O(n) 时间构建,总时间复杂度为 O( 4 n / √ n 4ⁿ/√n 4n/√n)。
  • 空间复杂度: O(n)。递归调用栈的深度最大为 2n,但主要空间消耗来自结果存储,结果集大小为卡塔兰数,空间复杂度为 O( 4 n / √ n 4ⁿ/√n 4n/√n)。算法本身的额外空间复杂度为 O(n)。

在这里插入图片描述

解题思路:

  1. 遍历起点: 从网格的每个单元格出发,尝试匹配单词的第一个字符。
  2. ​递归搜索: 对当前单元格的四个相邻方向(上、下、左、右)进行递归搜索,确保字符匹配且未被访问过。
  3. ​标记访问: 在搜索过程中临时标记已访问的单元格(如将字符改为特殊符号),并在回溯时恢复原状。
  4. 终止条件: 若完整匹配单词的所有字符,返回 true;若所有路径均失败,返回 false。

Java代码:

public class Solution {public boolean exist(char[][] board, String word) {int rows = board.length;int cols = board[0].length;for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {if (dfs(board, word, i, j, 0)) {return true;}}}return false;}private boolean dfs(char[][] board, String word, int i, int j, int index) {if (i == -1 || i == board.length || j == -1 || j == board[0].length || board[i][j] != word.charAt(index)) {return false;}if (index == word.length() - 1) return true;char temp = board[i][j];board[i][j] = '#';boolean found = dfs(board, word, i + 1, j, index + 1)|| dfs(board, word, i - 1, j, index + 1)|| dfs(board, word, i, j + 1, index + 1)|| dfs(board, word, i, j - 1, index + 1);board[i][j] = temp;return found;}
}

复杂度分析:

  • 时间复杂度: 最坏情况下为 O(M×N×4L),M×N 是网格的总单元格数,每个单元格作为起点。4L 是每个起点的最长递归深度(单词长度为 L,每一步有4个方向选择)。
  • 空间复杂度: O(L),递归调用栈的深度最大为单词长度 L。

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

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

相关文章

【Golang】Windows系统键鼠空闲监测练习

在本文中&#xff0c;我们将练习如何使用Golang编写一个简单的Windows系统空闲时间监测工具。该工具能够检测系统的空闲时间&#xff0c;并在达到一定阈值时计数。 功能概述 监控鼠标和键盘的空闲事件&#xff0c;每空闲超过50s&#xff0c;触发次数加一。 该工具具有以下功…

关于React Redux

官网&#xff1a;&#x1f449;详情一 &#x1f449;详情二 &#x1f449;关于redux 使用原因&#xff1a;&#x1f449;详情 /** 2-1、随着javascript单页应用程序的发展&#xff0c;需要在代码中管理更多的状态&#xff08;包括服务器响应数据、缓存数据、本地创建还未发送…

MySQL和Oracle批量插入SQL差异详解

文章目录 MySQL和Oracle批量插入SQL差异详解1. 基本批量插入语法1.1 MySQL批量插入1.2 Oracle批量插入 2. 带序列的批量插入2.1 MySQL带自增ID的批量插入2.2 Oracle带序列的批量插入 3. 条件批量插入3.1 MySQL条件批量插入3.2 Oracle条件批量插入 MySQL和Oracle批量插入SQL差异…

43页可编辑PPT | 大数据管理中心设计规划方案大数据中心组织架构大数据组织管理

这份文档是一份关于大数据管理中心规划设计方案的详细报告&#xff0c;涵盖了背景与需求分析、整体规划方案、关键能力实现方案以及实施方案等内容。报告强调大数据在城市治理中的重要性&#xff0c;提出通过构建统一的大数据平台&#xff0c;整合城市各部门数据资源&#xff0…

Python-八股总结

目录 1 python 垃圾处理机制2 yield3 python 多继承&#xff0c;两个父类有同名方法怎么办&#xff1f;4 python 多线程/多进程/协程4.1 多线程与GIL全局解释器锁4.2 多进程4.3 协程 5 乐观锁/悲观锁6 基本数据结构**1. 列表&#xff08;List&#xff09;****2. 元组&#xff0…

HTML 标签类型全面介绍

HTML 标签类型全面介绍 HTML&#xff08;HyperText Markup Language&#xff09;是构建 Web 页面结构的基础语言。HTML 由不同类型的标签组成&#xff0c;每种标签都有特定的用途。本文将全面介绍 HTML 标签的分类及其用法。 1. HTML 标签概述 HTML 标签通常成对出现&#xf…

vscode中的【粘滞滚动】的基本概念和作用,关闭了以后如何开启

1、粘滞滚动的基本概念和作用 ‌VSCode中的“粘滞”功能主要是指编辑器在滚动时的一种特殊效果&#xff0c;使得编辑器在滚动到某个位置时会“粘”在那里&#xff0c;而不是平滑滚动到底部或顶部。‌ 粘滞滚动的基本概念和作用 粘滞滚动功能可以让用户在滚动时更直观地看到当前…

【商城实战(101)】电商未来已来:新技术引领商城发展新航向

【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想…

深度学习Note.5(机器学习.6)

1.Runner类 一个任务应用机器学习方法流程&#xff1a; 数据集构建 模型构建 损失函数定义 优化器 模型训练 模型评价 模型预测 所以根据以上&#xff0c;我们把机器学习模型基本要素封装成一个Runner类&#xff08;加上模型保存、模型加载等功能。&#xff09; Runne…

linux服务器专题1------redis的安装及简单配置

在 linux上安装 Redis 可以按照以下步骤进行(此处用Ubuntu 服务器进行讲解)&#xff1a; 步骤 1: 更新系统包 打开终端并运行以下命令以确保你的系统是最新的&#xff1a; sudo apt update sudo apt upgrade步骤 2: 安装 Redis 使用 apt 包管理器安装 Redis&#xff1a; s…

面试问题总结:qt工程师/c++工程师

C 语言相关问题答案 面试问题总结&#xff1a;qt工程师/c工程师 C 语言相关问题答案 目录基础语法与特性内存管理预处理与编译 C 相关问题答案面向对象编程模板与泛型编程STL 标准模板库 Qt 相关问题答案Qt 基础与信号槽机制Qt 界面设计与布局管理Qt 多线程与并发编程 目录 基础…

实现实时数据推送:SpringBoot中SSE接口的两种方法

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

LXC 导入多Linux系统

前提要求 ubuntu下安装lxd 参考Rockylinux下安装lxd 参考LXC 源替换参考LXC 容器端口发布参考LXC webui 管理<

ES的文档更新机制

想获取更多高质量的Java技术文章&#xff1f;欢迎访问Java技术小馆官网&#xff0c;持续更新优质内容&#xff0c;助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring ES的文档更新机制 在现代应用中&#xff0c;数据的动态性越来越强&#xff0c;我们不仅需要快…

trae.ai 编辑器:前端开发者的智能效率革命

一、为什么我们需要更智能的编辑器&#xff1f; 作为从业5年的前端开发者&#xff0c;我使用过从Sublime到VSCode的各种编辑器。但随着现代前端技术的复杂度爆炸式增长&#xff08;想想一个React组件可能涉及JSX、CSS-in-JS、TypeScript和GraphQL&#xff09;&#xff0c;传统…

MySQL篇(一):慢查询定位及索引、B树相关知识详解

MySQL篇&#xff08;一&#xff09;&#xff1a;慢查询定位及索引、B树相关知识详解 MySQL篇&#xff08;一&#xff09;&#xff1a;慢查询定位及索引、B树相关知识详解一、MySQL中慢查询的定位&#xff08;一&#xff09;慢查询日志的开启&#xff08;二&#xff09;慢查询日…

uniapp APP端在线升级(简版)

设计思路&#xff1a; 1.版本比较&#xff1a;应用程序检查其当前版本与远程服务器上可用的最新版本 2. 更新状态指示&#xff1a;如果应用程序是不是最新的版本&#xff0c;则页面提示下载最新版本。 3.下载启动&#xff1a;通过plus.downloader.createDownload()启动新应用…

基于javaweb的SpringBoot教务课程管理设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

使用大语言模型进行Python图表可视化

Python使用matplotlib进行可视化一直有2个问题&#xff0c;一是代码繁琐&#xff0c;二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发&#xff0c;以更少的代码进行画图的和美化的库&#xff0c;但是这也带来了定制化不足的问题。在大模型时代&#xff0c;这个…

【JavaEE】MyBatis - Plus

目录 一、快速使用二、CRUD简单使用三、常见注解3.1 TableName3.2 TableFiled3.3 TableId 四、条件构造器4.1 QueryWrapper4.2 UpdateWrapper4.3 LambdaQueryWrapper4.4 LambdaUpdateWrapper 五、自定义SQL 一、快速使用 MyBatis Plus官方文档&#xff1a;MyBatis Plus官方文档…