剑指 Offer 12. 矩阵中的路径

题目链接

  • 题目类似于迷宫的搜索。
  • 需要注意的是,需要首先判断起始搜索的位置,可能有多个起点,都需要一一尝试。
  • 每轮迭代的时候记得将是否遍历标记数组还原为未遍历的状态。
package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2020/12/9 9:09
*/ import java.util.Arrays; /**
* [["a","b","c","e"],
* ["s","f","c","s"],
* ["a","d","e","e"]]
* 矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。
* 1 <= board.length <= 200
* 1 <= board[i].length <= 200
*/
public class Offer_12 {
private String word;
private boolean[][] travel;
private final int[][] direction = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public boolean exist(char[][] board, String word) {
if(board == null)
return false;
if(word.length() == 0)
return true;
this.word = word;
travel = new boolean[board.length][board[0].length];
for(int i =0; i< board.length; i++){
for(int j =0; j< board[0].length; j++){
travel[i][j] = false;
}
}
for(int i =0; i< board.length; i++){
int len = board[0].length;
for(int j =0; j< len; j++){
if(board[i][j] != word.charAt(0))
continue;
travel[i][j] = true;
if(findPath(board, 0, i, j)){
return true;
}
travel[i][j] = false;
}
}
return false;
}
public boolean findPath(char[][] board, int pos, int x, int y){
if(pos >= word.length() - 1){
if(board[x][y] == word.charAt(pos))
return true;
return false;
}
//遍历四个方向
for(int i = 0; i< 4; i++){
int dx = x + direction[i][0];
int dy = y+ direction[i][1];
if(dx>=0 && dy>=0 && dx<board.length && dy< board[0].length && !travel[dx][dy]){
if(board[dx][dy] == word.charAt(pos + 1)){
travel[dx][dy] = true;
if(findPath(board, pos+1, dx, dy)){
travel[dx][dy] = false;
return true;
}else travel[dx][dy] = false;
}
}
}
return false;
}
}

剑指 Offer 12. 矩阵中的路径 + 递归 + 深搜 + 字符串问题的更多相关文章

  1. 力扣 - 剑指 Offer 12. 矩阵中的路径

    题目 剑指 Offer 12. 矩阵中的路径 思路1(回溯.DFS) 这题可以使用回溯+递归来解决,思路如下: 将二维数组的每一个元素都作为起点进行回溯查找 每次查找的时候,都有四个方向,但是上一个方 ...

  2. 剑指 Offer 12. 矩阵中的路径

    题目描述 是一道很常见的深搜题目,不过里面要考虑一些边界问题,比如走过的路径是不能再次走入的,所以我这里我自己的 代码想到是利用一个新的二维的数组,记录走过的路径,不过题解的直接将原二维数组中的路径隐 ...

  3. 【Java】 剑指offer(11) 矩阵中的路径

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字 ...

  4. Go语言实现:【剑指offer】矩阵中的路径

    该题目来源于牛客网<剑指offer>专题. 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...

  5. 剑指Offer 65. 矩阵中的路径 (回溯)

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  6. [剑指Offer] 65.矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  7. 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)

    1. 题目描述 /* 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径. 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子. 如果一条 ...

  8. 剑指offer——13矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  9. [剑指Offer]12-矩阵中的路径(回溯)

    题目链接 https://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?tpId=13&tqId=11218&t ...

随机推荐

  1. Codeforces Round #647 (Div. 2) D. Johnny and Contribution(BFS)

    题目链接:https://codeforces.com/contest/1362/problem/D 题意 有一个 $n$ 点 $m$ 边的图,每个结点有一个从 $1 \sim n$ 的指定数字,每个 ...

  2. Codeforces Round #653 (Div. 3) C. Move Brackets

    题意/题解:经典括号匹配题目,不多说了. 代码: int t; int n; string s; int cnt; int main() { ios::sync_with_stdio(false);c ...

  3. SPI/QSPI通信协议详解和应用

    SPi是高速全双工的串行总线,通常应用在通讯速率较高的场合. SS:从设备选择信号线,也称片选信号线 每个从设备都有一个独立的SS信号线,信号线独占主机的一个引脚,及有多少个从设备就有多少个片选信号线 ...

  4. ssh配置方面小实验①

    注意:sshd_config配置文件有些特殊:注释掉的选项,并不是不生效的,而是默认生效选项.使用某选项时,要先取消注释,再修改为yes或no关于效率和安全的说明:安全:telnet < ssh ...

  5. POJ3233 构造子矩阵+矩阵快速幂

    题意:给你矩阵A,求S=A+A^1+A^2+...+A^n sol:直接把每一项解出来显然是不行的,也没必要. 我们可以YY一个矩阵: 其中1表示单位矩阵 然后容易得到: 可以看出这个分块矩阵的左下角 ...

  6. 蓝桥杯——试题 算法训练 Sereja and Squares

    Java 代码 ```` import java.util.Scanner; public class Main { private static long num = 0; private stat ...

  7. Vue & Sentry & ErrorHandler

    Vue & Sentry & ErrorHandler import * as Sentry from '@sentry/browser'; import { Vue as VueIn ...

  8. Mapbox 地图实验室

    Mapbox 地图实验室 Learn with Mapbox https://www.mapbox.com/community/education/ https://labs.mapbox.com/e ...

  9. MongoDB 101

    MongoDB 101 Studio 3T https://studio3t.com/academy/ https://studio3t.com/academy/lessons/introducing ...

  10. javascript algorithm visualization

    javascript algorithm visualization javascript算法可视化 https://algorithm-visualizer.org https://github.c ...