剑指 Offer 12. 矩阵中的路径 + 递归 + 深搜 + 字符串问题
剑指 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. 矩阵中的路径 + 递归 + 深搜 + 字符串问题的更多相关文章
- 力扣 - 剑指 Offer 12. 矩阵中的路径
		
题目 剑指 Offer 12. 矩阵中的路径 思路1(回溯.DFS) 这题可以使用回溯+递归来解决,思路如下: 将二维数组的每一个元素都作为起点进行回溯查找 每次查找的时候,都有四个方向,但是上一个方 ...
 - 剑指 Offer 12. 矩阵中的路径
		
题目描述 是一道很常见的深搜题目,不过里面要考虑一些边界问题,比如走过的路径是不能再次走入的,所以我这里我自己的 代码想到是利用一个新的二维的数组,记录走过的路径,不过题解的直接将原二维数组中的路径隐 ...
 - 【Java】 剑指offer(11) 矩阵中的路径
		
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字 ...
 - Go语言实现:【剑指offer】矩阵中的路径
		
该题目来源于牛客网<剑指offer>专题. 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向 ...
 - 剑指Offer 65. 矩阵中的路径 (回溯)
		
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
 - [剑指Offer] 65.矩阵中的路径
		
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
 - 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)
		
1. 题目描述 /* 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径. 路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子. 如果一条 ...
 - 剑指offer——13矩阵中的路径
		
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
 - [剑指Offer]12-矩阵中的路径(回溯)
		
题目链接 https://www.nowcoder.com/practice/c61c6999eecb4b8f88a98f66b273a3cc?tpId=13&tqId=11218&t ...
 
随机推荐
- 【noi 2.5_8465】马走日(dfs)
			
最基本的dfs.这代码理应超时的,我也不知为何AC了......打表我都放弃了,因为最大的数据真的要跑很久...... 1 #include<cstdio> 2 #include<c ...
 - Gym 100796K Profact
			
Alice is bored out of her mind by her math classes. She craves for something much more exciting. Tha ...
 - CodeForces - 612D  思维
			
题意: 给你n个线段和一个整数k,你需要找出来所有能被任意k条线段同时覆盖的区间个数的最小值,并按从左到右的顺序输出每个区间. 题解: 对于题目输入的n个线段的左端点L,右端点R,把它们分开放在结构体 ...
 - 加密算法——RSA算法(c++简单实现)
			
RSA算法原理转自:https://www.cnblogs.com/idreamo/p/9411265.html C++代码实现部分为本文新加 RSA算法简介 RSA是最流行的非对称加密算法之一.也被 ...
 - 国产网络损伤仪SandStorm -- 基本概念:什么是仿真引擎
			
"仿真引擎"在网络损伤仪SandStorm(www.minismb.com)或者网络IP仿真损伤仪中是一个最基本概念,它就相当于一个由两个物理以太网口组成的"网桥&quo ...
 - Ubuntu——常用命令
			
一.进入文件夹 1.cd .. # 进入上一个文件夹 2.cd ../.. # 进入上两个文件夹 3.cd - # 去到进入当前文件夹之前的那个文件夹 二.复制文件 cp 目标文件 复制文件名 三.移 ...
 - 51nod1459 带权最短路
			
1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分 ...
 - 手工数据结构系列-C语言模拟栈 hdu1022
			
这个题我一开始是这么想的.. 爆搜所有可能的出栈序列 然后对输入进行匹配 这样我感觉太慢 然后我们可以想到直接通过入栈序列对出栈序列进行匹配 但是我犯了一个错误..那就是出栈序列一定到入栈序列里找.. ...
 - js closures all in one
			
js closures all in one setTimeout 闭包,log(i, arr[¡]) var, let, closures, IIFE "use strict"; ...
 - MongoDB 101
			
MongoDB 101 Studio 3T https://studio3t.com/academy/ https://studio3t.com/academy/lessons/introducing ...