当前位置:网站首页>矩阵中的路径
矩阵中的路径
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;
}
}
边栏推荐
猜你喜欢
随机推荐
定了!2022世界VR产业大会将继续在南昌召开
A powerful js pop-up alert plugin
To eliminate air bubbles to save the mushroom h5 small game source code
Intouch System Platform IDE-1
this的绑定指向详细解答
80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)
Get out of the machine learning world forever!
FreeRTOS--stack experiment
Detailed explanation of network flow (what information can the flow network diagram generally reflect)
Win11怎么修改关机界面颜色?Win11修改关机界面颜色的方法
Scala基础语法入门(三)Scala中的各种运算符
FreeRTOS中名称规范
Do you know Dijkstra of graph theory?
水平垂直居中方式
FreeRTOS创建任务--动态创建、静态创建
Article 48 - Analysis of timestamp2 parameters【2022-08-01】
如何关闭开启硬件加速[通俗易懂]
高效代码静态测试工具Klocwork 2022.2——Portal全新升级、支持RLM
Basic operations of openGauss database (super detailed)
0801~面试题梳理