leetcode 79. 单词搜索 golang实现

Leetcode 79:单词搜索(最详细的解法!!!) 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] 给定 word = "ABCC... 阅读详情
描述
给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.
思路
回溯法
注意两点
1. 注意边界 在向四个方向遍历之前 先判断边界 即剪枝
2. 我们在遍历时要将曾经遍历的位置记录下来,往四个方向遍历后要将位置重置 否则下次往其它方向遍历时出错
实现
func exist(board [][]byte, word string) bool {
	var ret bool

	rows := len(board)
	if len(board[0]) == 0 {
		return false
	}
	cols := len(board[0])

	for i := 0; i < rows; i++ {
		for j := 0; j < cols; j++ {
			m := make([][]bool, rows)       // 用来记录遍历过的位置
			for row := 0; row < rows; row++ {
				m[row] = make([]bool, cols)
			}
			ret = existBackTracking(0, board, i, j, word, rows-1, cols-1, m)
			if ret == true {
				return true
			}
		}
	}

	return ret
}

func existBackTracking(index int, board [][]byte, rows, cols int, word string, maxRows, maxCols int, m [][]bool) bool {
	if index == len(word)-1 {       // 判断是否遍历完
		return board[rows][cols] == word[index]
	}

	if board[rows][cols] != word[index] {       // 返回条件 如果当前遍历的字符不符条件 直接返回false
		return false
	}

	m[rows][cols] = true
	index++

    // 四个方向遍历  也可用for循环遍历
	if rows > 0 && m[rows-1][cols] == false {
		if existBackTracking(index, board, rows-1, cols, word, maxRows, maxCols, m) {
			return true
		} else {
			m[rows-1][cols] = false         //  遍历完一个方向失败后 要将这个方向的字符位置重置
		}
	}

	if rows < maxRows && m[rows+1][cols] == false {
		if existBackTracking(index, board, rows+1, cols, word, maxRows, maxCols, m) {
			return true
		} else {
			m[rows+1][cols] = false
		}
	}

	if cols > 0 && m[rows][cols-1] == false {
		if existBackTracking(index, board, rows, cols-1, word, maxRows, maxCols, m) {
			return true
		}else{
			m[rows][cols-1] = false
		}
	}

	if cols < maxCols && m[rows][cols+1] == false {
		if existBackTracking(index, board, rows, cols+1, word, maxRows, maxCols, m){
			return true
		}else{
			m[rows][cols+1] = false
		}
	}


	return false
}
LeetCode刷题:79. Word Search — JAVA DFS算法 LeetCode刷题:79. Word Search 原题链接:https://leetcode.com/problems/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... 阅读详情

相关推荐

79.给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。实现一个算法如果 word 存在于网格中,返回 true ;否则,返回 false

输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCB”输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “SEE”

yonggeit的博客 3126

Golang每日一练(leetDay0027) 单词搜索、删除有序数组中的重复项 II、搜索旋转排序数组 II

79. 单词搜索 Word Search🌟🌟   80. 删除有序数组中的重复项 II Remove-duplicates-from-sorted-array-II🌟🌟   81. 搜索旋转排序数组 II Search-in-rotated-sorted-array-II🌟🌟

汉阳Hann's Home 971

GPS从入门到放弃(一) --- GPS基础原理

GPS从入门到放弃(一) — GPS基础原理 GPS,全称Global Positioning System,已经广泛应用于我们的日常生活中了,现在的智能手机 里都会自带GPS定位功能。这是一个美国的全球定位系统,虽然我们现在也有北斗了,但毕竟GPS搞的早,所以先从它开始研究起。 整个GPS系统分三大部分: 地面站 卫星 接收机 地面站负责监控。它们通过接收、测量各个卫星信号,计算卫星的运行轨...

tyst08的专栏 2万+

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

题目描述 给定一个 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 .

admin_o1的博客 328

Fastp实战指南:高效处理fastq数据的质控技巧

本文是Fastp实战指南,详细介绍了如何使用Fastp工具高效处理fastq数据的质控技巧。从数据清洗的必要性、基础命令解析,到高级参数定制、UMI数据处理及批量自动化流程,提供一站式解决方案。Fastp以其“All-in-One”的快速质控能力,帮助用户确保测序数据质量,为后续生物信息学分析奠定可靠基础。

weixin_29254029的博客 391

PAM4信号测试实战:从眼图分析到误码率测量的技术演进

在高速数字系统设计中,信号完整性测试是确保数据传输可靠性的核心环节。其基本原理在于通过时域和频域分析,精确评估信号在传输过程中的质量衰减与失真。随着数据速率向56Gbps及以上演进,传统的NRZ编码面临带宽瓶颈,而PAM4调制技术通过在每个符号周期内承载更多比特信息,成为提升信道效率的关键路径。这项技术的工程价值在于,它允许在相同带宽下实现翻倍的数据吞吐量,这对于数据中心互联、PCIe 6.0及800G以太网等高速接口至关重要。然而,PAM4信号电平间距更小,对噪声和抖动极为敏感,导致其原始误码率显著升高,

weixin_42522817的博客 657

golang力扣leetcode 79.单词搜索

79.单词搜索79.单词搜索题解代码 79.单词搜索 79.单词搜索 题解 思路:dfs,最近写dfs好顺,好喜欢写dfs。。。 代码 type pair struct { x, y int } var dirs = []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} func exist(board [][]byte, word string) bool { flag := false vis := make(map[pair]bool) n, m := len(

清风 504

CMOS sensor 基础

NA

m0_72053187的博客 1660

回溯:79、单词搜索

思路: 依次对单元格中每一个字母沿四个方向进行深度优先搜索,搜索中为防止字母重复使用,需维护一个标识字母是否已经被访问的visited数组,回溯完成。 class Solution { public: //搜索的四个方向 int dir[4][4]={{-1,0},{1,0},{0,1},{0,-1}}; bool exist(vector<vector<char>>& board, string word) { int m=b..

carolineme的博客 154

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 577

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3642

79. 单词搜索 @Python @Go

时间:O(m * n * len(word))

闲庭信步 178

【音视频 ffmpeg 学习】 RTMP推流 mp4文件

3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。2.RTMP协议中基本的数据单元称为消息(Message)。下载地址:http://nginx.org/download。下载 rtmp模块 到nginx 模块下。安装nginx 和 rtmp模块。(1). linux 环境准备。下载nginx安装包。使用 vcl 播放流。

weixin_45397344的博客 2276

(LeetCode-Hot100)79. 单词搜索

摘要:LeetCode 79题要求在m×n字符网格中搜索单词,单词需由相邻单元格字母顺序组成且不重复使用单元格。采用回溯+DFS算法:遍历每个起点,匹配首字符后DFS递归检查四个方向,标记访问过的单元格并在失败时回溯。Java和Go实现均使用原地标记优化空间。时间复杂度O(M×N×3^L),空间复杂度O(L)。该算法能正确处理边界情况,确保完备性和正确性。

小飞的博客 816

【TC3xx芯片】TC3xx DMA模块详解

TC3xx DMA模块详解

qq_36056498的博客 5917

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

算法leetcode|79. 单词搜索(rust重拳出击)

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

二当家的白帽子 1767

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

79. 单词搜索【回溯】

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。:你可以使用搜索剪枝的技术来优化解决方案,使其在 board 更大的情况下可以更快解决问题?回溯+定义四个方向的技巧,能找到路径就是。主要看下注释,写的比较详细。

YouMing_Li的博客 501

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Leetcode Golang 79. Word Search.go

code func help(b [][]byte, word string, i, j int) bool { if word == "" { return true } if b[i][j] != word[0] { return false } if len(word) == 1 { return true } b[i][j] = '#' if i > 0 ...

anakinsun的博客 250

2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母

2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。力扣79。 福大大 答案2021-10-02: 自然智慧即可。 递归。对于board[i][j],上下左右走。1.制造现场;2.递归;3.恢复现场。 代码用golang编写。代码如下:

福大大架构师每日一题 2万+

leetcode | go | 第79题 | 单词搜索

【代码】leetcode | go | 第79题 | 单词搜索。

iCling的博客 122

Golang | Leetcode Golang题解之第79题单词搜索

Golang | Leetcode Golang题解之第79题单词搜索

weixin_66442839的博客 454

LeetCode 79 Word Search(单词查找)

题目链接:https://leetcode.com/problems/word-search/#/description 给出一个二维字符表,并给出一个String类型的单词,查找该单词是否出现在该二维字符表中。 For example,Givenboard= [ ['A','B','C','E'], ['S','F','C','S'], ['A...

weixin_30270561的博客 120

leetcode | go | 第212题 | 单词搜索Ⅱ

【代码】leetcode | go | 第212题 | 单词搜索Ⅱ。

iCling的博客 178

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

力扣热题100 - 网易二面 - 回溯:单词搜索

力扣热题100 - 网易二面 - 回溯:单词搜索

H_P10的博客 604

LeetCode热题100JS(64/100)第十二天|79|131|51|35|74

注意边界条件的设置,一步一步来解就行这里修改了dfs函数的逻辑,实现同样的效果注意 if(r+c==R+C||r-c==R-c) return false这行代码检查当前行r的皇后位置(r, c)是否与之前的某一行R的皇后位置在同一条对角线上。检查两个皇后是否在同一主对角线(从左上到右下)。检查两个皇后是否在同一副对角线(从右上到左下)。简单注意这一行是怎么表示二维数组的位置M=matrix[Math.floor(mid/n)][mid%n]

Alicesflower的博客 906
上一篇: leetcode 78. 子集 golang实现
下一篇: leetcode 437. 路径总和 III golang实现
tzh_linux
博客等级 码龄12年 12粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值