博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 79. 单词搜索(Word Search)
阅读量:4560 次
发布时间:2019-06-08

本文共 1590 字,大约阅读时间需要 5 分钟。

 

题目描述

 

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

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

 

示例:

board =[  ['A','B','C','E'],  ['S','F','C','S'],  ['A','D','E','E']]给定 word = "ABCCED", 返回 true.给定 word = "SEE", 返回 true.给定 word = "ABCB", 返回 false.

 

解题思路

 

本题可用回溯法来求解。定义一个访问数组初始全部置为0,并定义当前路径长度初始置0,从矩阵第一个字符开始遍历:

  • 从当前字符出发,若与字符串对应路径长度的字符相等,就分别向上下左右走一步,并把当前字符访问数组置1,路径长度加1;
  • 若当前字符走到了字符串末尾,说明存在一条路径与字符串相等,返回true;
  • 若当前字符出发的各条路径都不能找到一条路径与字符串相等,则向当前路径上一步回溯,并把当前字符访问数组置0,路径长度减1

 

代码

 

1 class Solution { 2 public: 3     bool exist(vector
>& board, string word) { 4 if(board.empty()||word=="") 5 return false; 6 int rows=board.size(); 7 int cols=board[0].size(); 8 for(int i=0;i
> visit(rows,vector
(cols,false));11 if(find(visit,board,word,0,i,j))12 return true;13 }14 }15 return false;16 }17 bool find(vector
> &visit, vector
>& board, string word, int idx, int row, int col){18 if(idx==word.size())19 return true;20 int rows=board.size();21 int cols=board[0].size();22 if(row
=0&&col
=0&&!visit[row][col]&&board[row][col]==word[idx]){23 visit[row][col]=true;24 bool hasPath=find(visit,board,word,idx+1,row+1,col)||find(visit,board,word,idx+1,row,col+1)||25 find(visit,board,word,idx+1,row-1,col)||find(visit,board,word,idx+1,row,col-1);26 if(!hasPath)27 visit[row][col]=false;28 else29 return true;30 }31 return false;32 }33 };

 

转载于:https://www.cnblogs.com/wmx24/p/9025879.html

你可能感兴趣的文章
现场赛:开关灯问题
查看>>
codeforces A. Jeff and Rounding (数学公式+贪心)
查看>>
zoj 3462
查看>>
java多线程-信号量
查看>>
如何在Delphi XE2中使用Dynamic Web TWAIN
查看>>
js自定义实用函数总结
查看>>
java内存区域与内存溢出异常
查看>>
点点滴滴的成长[2011-11-1]:理解C#修饰符
查看>>
csrf(跨站请求伪造)
查看>>
高性能MySQL笔记-第1章MySQL Architecture and History-001
查看>>
c# 基本知识 ref 和 out
查看>>
在ubuntu下如何验证文件的MD5码 (转载)
查看>>
嵌入式Linux开发板
查看>>
通过创建制定版本react-native项目解决“Unable to resolve module `AccessibilityInfo` ”的问题...
查看>>
C# 一个例子,北大青鸟的。自己变了下。
查看>>
Error: invalid "instanceof" keyword value Promise的解决方法
查看>>
一,模块,模块导入
查看>>
linux metapost 简介
查看>>
错误检查roswtf
查看>>
React Native Picker (逐个添加数据、array循环添加数据)
查看>>