Word Search 在一个二维字符矩阵里找单词 @LeetCode

数据结构大作业——在一个字符矩阵中找到某个单词是否出现过 #include <bits/stdc++.h> #define change_read() freopen("C:\\Users\\Administrator\\Desktop\\in.txt","r",stdin) using namespace std; struct p { const static int maxm = 1e3+10; char mat[max... 阅读详情

思路:DFS

这道题卡时间卡的很紧,多了一条没用的语句就会TLE。开始时候在exit()里遍历每个节点时,为了直接在board里面记录访问过的元素,我居然每次都新建board二维数组,还要拷贝原来内容到新数组中,铁定TLE。

后来在dfs里面新加了一个参数boolean[][] visited用来记录是否访问过了。这样每次虽然要新建visited数组,但不用拷贝了,但还是TLE。

后来运用我总结的DFS模板,在改变board访问元素之前先保存到一个tmp变量中,在结束递归后还原现场。压线AC!


package Level3;

/**
 * Word Search 
 * 
 *  Given a 2D board and a word, find if the word exists in the grid.

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

For example,
Given board =

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]
word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.
 *
 */
public class S79 {

	public static void main(String[] args) {
		char[][] board = {{'C','A','A'},{'A','A','A'},{'B','C','D'}};
		String word = "AAB";
		System.out.println(exist(board, word));
	}
	
	public static boolean exist(char[][] board, String word) {
		// 对每一个节点进行深搜
		for(int i=0; i<board.length; i++){
			for(int j=0; j<board[0].length; j++){
				if(dfs(board, word, 0, i, j)){
					return true;
				}
			}
		}
		return false;
    }
	
	// dfs搜索
	public static boolean dfs(char[][] board, String word, int index, int x, int y){
		if(index == word.length()-1 && word.charAt(index)==board[x][y]){
			return true;
		}
		
		if(word.charAt(index) != board[x][y]){
			return false;
		}
		
		char tmp = board[x][y];		// 保存原始值
		board[x][y] = '.';
		boolean b1 = false, b2 = false, b3 = false, b4 = false;
		if(x-1>=0 && board[x-1][y] != '.'){
			b1 = dfs(board, word, index+1, x-1, y);
		}
		if(!b1 && y-1>=0 && board[x][y-1] != '.'){
			b2 = dfs(board, word, index+1, x, y-1);
		}
		if(!b1 && !b2 && x+1<board.length && board[x+1][y] != '.'){
			b3 = dfs(board, word, index+1, x+1, y);
		}
		if(!b1 && !b2 && !b3 && y+1<board[0].length && board[x][y+1] != '.'){
			b4 = dfs(board, word, index+1, x, y+1);
		}
		
		board[x][y] = tmp;			// 还原原始值
		return b1 || b2 || b3 || b4;
	}
}



C++实现单词搜索算法 然后,我们可以从起始点开始,向其上、下、左、右四个方向进行搜索。如果最终能够匹配到单词中所有的字符,则说明单词在矩阵中存在,返回true。由于单词只能沿着水平或垂直方向进行,因此在搜索过程中,可以通过限制搜索方向,来减少不必要的搜索。具体来说,如果当前位置的字符与目标单词word的第k个字符不匹配,那么我们可以直接返回false,不必继续向四个方向进行搜索。为了避免每次都新建一个visited数组,我们可以使用原矩阵,将已访问的位置的字符修改为一个特定的字符(例如#),然后在回溯的时候再将其还原。 阅读详情

相关推荐

Leetcode 79. Word Search--给定一个字符串,在二维数组中遍历每一个字符,要求连续遍历相邻的元素,每个元素只能遍历一次

Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically n...

Top5软件工程硕士,先后在京东、字节从事多年Java后端开发、实时和离线大数据开发 650

leetcode:79.二维矩阵可以走出的单词

给定一个char[][] matrix,也就是char类型的二维数组,再给定一个字符串word,可以从任何一个某个位置出发,可以走上下左右,能不能找到word? 设定1:可以走重复路的情况下,返回能不能找到 比如,word = “zoooz”,是可以找到的,z -> o -> o -> o -> z,因为允许走一条路径中已经走过的字符设定2:不可以走重复路的情况下,返回能不能找到 比如,word = “zoooz”,是不可以找到的,因为允许走一条路径中已经走过的字符不能重复走样本对应模型定义f(i,j,k)

OceanStar的博客 765

新华DCS系统仿真测试方法详细介绍

新华DCS ICAN3.1系统是应用广泛并且功能非常强大的国产DCS系统。具有管理虚拟CPU并仿真运行的功能。并且上位机画面可以与虚拟DPU数据实时同步仿真。具体仿真方法如下所示: 1、 需要设备及软件: 2、步骤如下: 2.1硬件步骤: 1)电脑开机。 2)交换机连接电脑网卡。 3)交换机上电运行。 2.2软件步骤: 1)设置电脑IP 一般配置IP为A网工程站IP。 222.222.221.201/255.255.255.0 2)建立虚拟DPU 登录 D:\iCAN\Program\Vxcu 文件夹。

lw_waston的博客 6894

单词搜索--DFS

0x01.问题 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 输入示例: board = [ [‘A’,‘B’,‘C’,‘E’], [‘S’,‘F’,‘C’,‘S’], [‘A’,‘D’,‘E’,‘E’] ] 给定 word = “ABCCE...

ATFWUS的博客 2018

QGroundControl高级配置与自定义功能实战指南

本文深入探讨了QGroundControl(QGC)的高级配置与自定义功能,为无人机开发者、系统集成商和高级用户提供实战指南。内容涵盖从品牌界面定制、自定义MAVLink消息处理,到插件开发与自动化部署的全流程,旨在帮助用户解锁QGC的隐藏潜力,打造专属的行业解决方案。

weixin_29234509的博客 239

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 85

golang力扣leetcode 240.搜索二维矩阵II

240.搜索二维矩阵II240.搜索二维矩阵II题解代码 240.搜索二维矩阵II 240.搜索二维矩阵II 题解 题目:给一个从左到右递增,从上到下递增的二维矩阵,搜索一个数在不在矩阵中 思路: 一想就是二分 从左到右递增,从上到下递增的性质 其实可以从右上开始搜索 如果当前的数小于target,则进入下一行 如果当前的数大于target,则进入上一列 代码 func searchMatrix(matrix [][]int, target int) bool { for i, v := range

清风 745

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2640

go语言刷题:79. 单词搜索

题目: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例 1: 输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED” 输出:true 示例

lanseali的博客 277

学Simulink——基于Simulink的输入-输出线性化精确转矩控制

本文详细介绍了基于Simulink的永磁同步电机(PMSM)输入-输出线性化(IOL)精确转矩控制方法。针对传统解耦控制在非线性转矩特性下的局限性,提出通过精确反馈线性化实现转矩指令与实际转矩的严格线性关系。文章系统阐述了IOL原理、PMSM控制器推导过程,并提供了完整的Simulink建模步骤,包括电机模型搭建、IOL控制器实现和闭环系统构建。通过仿真对比验证了IOL方法在转矩跟踪精度、动态响应和参数鲁棒性方面的显著优势,最后讨论了工程实现要点和扩展应用方向。该方法为高性能伺服系统开发提供了有效解决方案。

amy_mhd的博客 60

基于simulink构建一个完整的航空航天器姿态控制与导航仿真模型

航空航天器的姿态控制与导航系统是确保飞行器稳定运行和精确执行任务的核心技术。其目标是通过传感器获取飞行器的状态信息,并利用控制器调整飞行器的姿态,使其按照预定轨迹飞行。基于MATLAB/Simulink平台进行航空航天器姿态控制与导航系统的建模与仿真,可以帮助研究者验证算法性能并优化系统的动态响应。本项目旨在构建一个完整的航空航天器姿态控制与导航仿真模型,包括飞行器动力学建模、传感器模块设计、控制器实现以及导航算法仿真,并通过仿真分析其性能。

xiaoheshang_123的博客 272

LeetCode刷题:212. 单词搜索 II (golang版)

题目描述 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例 1: 输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = .

admin_o1的博客 359

实战:利用 Agent Harness 自动化 PPT 制作

本文将带你从零开始,用轻量级Agent编排框架,结合主流大模型(GPT-4o、通义千问、文心一言等),搭建一套全自动化的PPT生成工作流:从用户输入自然语言需求,到需求解析、大纲生成、内容填充、数据匹配、排版美化、导出成品,全程不需要手动操作,最快10分钟就能产出符合要求的PPT。我们不会讲晦涩的Agent理论,所有步骤都有可直接运行的代码示例,哪怕你只有基础的Python语法基础,也能跟着一步步做出能用的自动PPT工具。

AI Agent Harness Engineering 569

[Leetcode学习-java]Word Search(二维数组查找字符串)

问题: 难度:easy 说明: 给出二维数组 char[][],和需要查找的字符串,如果存在返回 true,查找的时候可以查找上下左右不重复的 串,其实这个已经做过更复杂的了。 问题链接:https://leetcode.com/problems/word-search/ 相关问题: Word Search II(二维数组找相同字符串):https://blog.youkuaiyun.com/qq_28033719/article/details/107055702 输入范围: boardandwo..

qq_28033719的博客 780

RHCA II之路---EX442-10

这题比较耗时,可以多开2个窗口让他跑起来后先做后面的题目。

Q先生 587

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

题目 2926: 查找最接近的元素 C语言

二分法

Lukegood的博客 798

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode 79.单词搜索

一,问题描述 二,问题分析 整体思路 图搜索策略DFS和回溯的思想 标记数组 用一个二维数组visited数组标记元素是否被使用过 循环遍历 由于起点并不是唯一的,所以通过两个循环遍历整个数组找到开始的位置,即满足wrod[0]的字母 回溯的思想 找到满足开始位置后,再开始搜索,搜索的方向为上下左右四个方向,如果满足接下来的条件,便继续搜索,如果不满足便回...

q2511130633的博客 253

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【LeetCode】79、单词搜索(dfs,回溯,vector二维数组动态初始化)

题目描述 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用 示例: 题解 题目要求相邻单元格的字母且不允许重复。 思路是: 在二维网格中将单词中字母逐个搜索,如果搜索到该字母,则在该字母相邻(上下左右)位置搜素单词中下一个目标字母,如果相邻位置存在下一个目标字母,则以下一个字母为中心,继续在该字母邻近搜索,这样一直递归搜索,深度优先遍历(如果找到一个目标字

hhb442的博客 292

Java实现-搜索二维矩阵

写出一个高效的算法来搜索 m × n矩阵中的值。 这个矩阵具有以下特性: 每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数。 您在真实的面试中是否遇到过这个题?  Yes 样例 考虑下列矩阵: [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] 给出 targ

Narasimha_Karumanchi 1330

每日一题:二维字符数组中的单词搜索

摘要:使用深度优先搜索(DFS)和回溯法,从每个起点尝试匹配 word,通过递归搜索四个方向,并用临时标记避免重复访问。匹配成功返回 true,否则回溯并继续搜索。

m0_59246703的博客 1011

经典算法题-矩阵中查找单词路径数

1.问题描述 Problem Statement 问题陈述 You are given a String[] grid representing a rectangular grid of letters. You are also given a String find, a word you are to find within the grid. The starting point m...

逍遥云恋 1159

【LeetCode】212. 单词搜索 II

一、题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。 示例: 输入: words = ["oath","pea","eat","rain"] and board = [ ['o','a','a','n'], ['e','t','a','e'], ['i','h','k','r

HeavenDan的博客 346

java遍历二维字符数组_java-在二维字符数组上查找单词

有趣的问题.我将首先通过水平,垂直和对角线(双向)遍历拼图来构建“可能的单词持有者”列表(可能包含给定单词中的一个字符的序列)来解决此问题.然后,我将查看在每个获得的“可能的单词持有者”中是否存在给定的单词(或它们的反向符号)(使用Java中的contains()方法).这是我用Java写的代码.我没有对其进行正确的测试,但是我想它可以工作!import java.util.HashSet;imp...

weixin_36338765的博客 445

二维数组的查找(根据给定的数查找相等的元素)

完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

kuangsonghan的博客 2333

LeetCode简单题之检查相同字母间的距离

题目中规定相同的字母只出现两次,所以如果需要获取两个字母的下标则需要正向遍历字符串获取字母第一次出现时的下标,然后负向遍历一遍获取字母第二次出现的下标,然后根据两个下标差来计算结果是否符合预期。输入:s = “abaccb”, distance = [1,3,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]输入:s = “aa”, distance = [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

Lonery的博客 558

二维数组查找单词

给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCCED", 返回 true 给定 word = "SEE", 返回 true 给定 word = "ABCB", 返回 fa

qq_45560350的博客 1564
上一篇: Subsets 求子集 @LeetCode
下一篇: Validate Binary Search Tree 检测一个BST是否有效@LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值