当前位置:网站首页>矩阵中的路径
矩阵中的路径
2022-08-02 13:04:00 【龙崎流河】
题目:
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。
例子1:
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”
输出:true
例子2:
输入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”
输出:false
分析:
该题使用图的深度搜索算法,首先依次从左往右,从上往下遍历二维数组,遍历第一个元素时发现和字符串第一个字母匹配就深度搜索,搜索方向是右下左上,如果发现下一个元素上下左右搜索和字符串第二个元素不匹配就返回false,如果匹配同理接着搜素直到找完都匹配上返回true,防止访问重复元素一般会建立一个布尔类型的二维数组来判断是否访问重复。
时间复杂度为O(mn3 ^len)
代码:
public class Exist {
int m;
int n;
int len;
// boolean[][] visited;
public boolean exist(char[][] board, String word) {
this.m = board.length;
this.n = board[0].length;
this.len = word.length();
// visited = new boolean[m][n];
for (int i = 0; i <m; i++) {
for (int j = 0; j <n; j++) {
if (dfs(board,i,j,word,0)){
return true;
}
}
}
return false;
}
private boolean dfs(char[][] board, int i, int j, String word, int k) {
if (i < 0 || i >= m || j < 0 || j >=n ||board[i][j] != word.charAt(k)){
return false;
}
if (k == len - 1){
return true;
}
//visited[i][j] = true;
//访问完赋值就相当于访问过了
board[i][j] = '\n';
boolean res = dfs(board,i,j+1,word,k+1) || dfs(board,i+1,j,word,k+1)
|| dfs(board,i,j-1,word,k+1) || dfs(board,i-1,j,word,k+1);
//回溯
board[i][j] = word.charAt(k);
return res;
}
}
边栏推荐
- Basic operations of openGauss database (super detailed)
- 86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
- ESP8266模块使用完整教程「建议收藏」
- Do you know Dijkstra of graph theory?
- Cannot determine loading status from target frame detached when selenium chrome driver is running
- 短视频美食自媒体怎么做?5步教你快速上手
- MFC入门教程(深入浅出MFC)
- selenium chrome driver运行时的cannot determine loading status from target frame detached问题
- Custom mvc framework review
- 网络流详解(流网图一般能够反映什么信息)
猜你喜欢
LeetCode_139_word split
ThinkPHP 5.1反序列化分析和poc
Singleton pattern of seven kinds of writing, you know?
汉源高科千兆12光12电管理型工业以太网交换机 12千兆光12千兆电口宽温环网交换机
Good shooting js game source code
【C语言】虐打循环练习题(2)
【C语言】手把手带你写游戏 —— 猜数字
【C语言】函数哪些事儿,你真的get到了吗?(1)
Automatically generate code generator recommendation-code-gen
Article 48 - Analysis of timestamp2 parameters【2022-08-01】
随机推荐
机器人碰撞检测方法形式化
【C语言】剖析函数递归(3)
wx-wow(微信小程序动效库)
麻烦问一下,对mysql 场景注入故障,是不是不是对mysql server 端注入故障,只是对ja
水平垂直居中方式
.Net 5.0快速上手 Redis
PGSQL database to realize the import and export
3 ways for OpenFeign to set headers
为什么IDEA连接mysql Unable to resolve table 编译报错但是可以运行
86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
To eliminate air bubbles to save the mushroom h5 small game source code
pytorch model to tensorflow model
Redis all
移动端适配,华为浏览器底色无法正常显示
scrapy框架初识1
js源码跳转的几种方式,在当前页面跳转,在空白页跳转
Redis全部
图论之Prim,最小生成树该怎么解?
你知道图论的Dijkstra吗?
自媒体创作怎样提高原创度,打造爆款作品?