• 矩阵中的路径


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

    java:

     1 public class Solution {
     2     private static final int[][] next = {{0,1} , {0,-1} , {1,0} , {-1,0}} ;
     3     private int rows ;
     4     private int cols ;
     5     public boolean hasPath(char[] matrix, int rows, int cols, char[] str)
     6     {
     7         if (rows == 0 || cols == 0)
     8             return false ;
     9         this.rows = rows ;
    10         this.cols = cols ;
    11         boolean[][] mark  = new boolean[rows][cols] ;
    12         char[][] arr = init(matrix) ;
    13         for(int i = 0 ; i < rows ; i++){
    14             for(int j = 0 ; j < cols ; j++){
    15                 if (backtrcking(arr,str,mark,0,i,j))
    16                     return true ;
    17             }
    18         }
    19         return false ;
    20     }
    21     
    22     private boolean backtrcking(char[][] arr , char[] str , boolean[][] mark , int curLen , int r , int c){
    23         if (curLen == str.length)
    24             return true ;
    25         if (r < 0 || r >= rows || c < 0 || c >= cols || mark[r][c] || arr[r][c] != str[curLen])
    26             return false ;
    27         mark[r][c] = true ;
    28         for(int[] n : next){
    29             if (backtrcking(arr,str,mark,curLen+1,r+n[0],c+n[1]))
    30                 return true ;
    31         }
    32         mark[r][c] = false ;
    33         return false ;
    34     }
    35     
    36     private char[][] init(char[] matrix){
    37         char[][] arr = new char[rows][cols] ;
    38         int k = 0 ;
    39         for(int i = 0 ; i < rows ; i++){
    40             for(int j = 0 ; j < cols ; j++){
    41                 arr[i][j] = matrix[k++] ;
    42             }
    43         }
    44         return arr ;
    45     }
    46 
    47 
    48 }
  • 相关阅读:
    MySQL 5.5版本数据库介绍与二进制安装
    nginx配置文件的基础优化
    yum源是什么
    微服务之间调用token管理
    微服务之间调用事务处理
    idea
    sentry
    infinispan配置
    微服务事务处理
    高并发处理
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/10627457.html
Copyright © 2020-2023  润新知