当前位置:网站首页>矩阵中的路径
矩阵中的路径
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;
}
}
边栏推荐
- 水平垂直居中方式
- Win11怎么修改关机界面颜色?Win11修改关机界面颜色的方法
- RISC-V instruction format and 6 basic integer instructions
- js true 3d histogram plugin
- FreeRTOS实验--删除任务
- The uniapp/applet onload method executes the interpretation every time the page is opened
- How to turn off hardware acceleration [easy to understand]
- LeetCode_377_Combination Sum IV
- 80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)
- this的绑定指向详细解答
猜你喜欢
随机推荐
Openlayers Quick Start Tutorial
js数组递归使用
智能手表前景如何?
第48篇-timestamp2参数分析【2022-08-01】
Taurus.MVC V3.0.3 microservice open source framework released: Make the evolution of .NET architecture easier in large concurrency.
80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)
C语言结构体(入门)
Redis all
Object.entries()
pytorch model to tensorflow model
scrapy框架初识1
wx-wow(微信小程序动效库)
GCC版本升级到指定版本
86.(cesium之家)cesium叠加面接收阴影效果(gltf模型)
Mysql索引详解(图文并茂)
First acquaintance of scrapy framework 1
0801~面试题梳理
【C语言】手把手带你写游戏 —— 猜数字
pytorch模型转tensorflow模型
设置代理服务器(谷歌+IE)「建议收藏」









