• [Java]剑指offer:矩阵中的路径


    题目描述

    请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 
    矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。
     

    示例1 输入

    [[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcced"

    返回值

    true

    示例2 输入

    [[a,b,c,e],[s,f,c,s],[a,d,e,e]],"abcb"

    返回值

    false

    思路

    对矩阵中的每个位置使用深度优先搜索以查找是否有符合的字符路径

     1 import java.util.*;
     2 
     3 
     4 public class Solution {
     5     /**
     6      * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     7      *
     8      * 
     9      * @param matrix char字符型二维数组 
    10      * @param word string字符串 
    11      * @return bool布尔型
    12      */
    13     
    14     boolean[][] visited;
    15     int[][] directions = {{-1,0},{0,-1},{0,1},{1,0}};
    16     int m,n;
    17     int len;
    18     public boolean hasPath (char[][] matrix, String word) {
    19         // write code here
    20         m = matrix.length;
    21         n = matrix[0].length;
    22         len = word.length();
    23         visited = new boolean[m][n];
    24         for(int i=0;i<m;i++){
    25             for(int j=0;j<n;j++){
    26                 //遍历整个矩阵 把每个位置都作为起点试一次
    27                 if(dfs(matrix,word,i,j,0)){
    28                     return true;
    29                 }
    30             }
    31         }
    32         return false;
    33     }
    34     
    35     public boolean dfs(char[][] matrix,String word,int i,int j,int index){
    36         //最后一个字符
    37         if(index==len-1){
    38             return matrix[i][j] == word.charAt(index);
    39         }
    40         if(matrix[i][j]==word.charAt(index)){
    41             visited[i][j] = true;
    42             // 遍历i、j的上下左右位置
    43             for(int k=0;k<4;k++){
    44                 int x = i + directions[k][0];
    45                 int y = j + directions[k][1];
    46                 if(inArea(x,y)&&!visited[x][y]){
    47                     if(dfs(matrix,word,x,y,index+1)){
    48                         return true;
    49                     }
    50                 }
    51             }
    52             visited[i][j] = false;
    53         }
    54         return false;
    55     }
    56     
    57     public boolean inArea(int x,int y){
    58         return x>=0&&x<m&&y>=0&&y<n;
    59     }
    60 }
  • 相关阅读:
    JavaScript知识点总结
    Python错误:ImportError: No module named 'requests'
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class
    Html重点知识
    使用Gson中的JsonElement所遇到的坑
    AndroidStudio:The number of method references in a .dex file cannot exceed 64K错误
    使用TextUtils.isEmpty()遇到的坑
    Gson常用方法
    AndroidStudio——java.lang.UnsatisfiedLinkError错误
    RecyclerView点击,移动到中间位置
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/14722006.html
Copyright © 2020-2023  润新知