矩阵中的路径

矩阵中的路径

https://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6?tpId=13&&tqId=11218&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

import java.util.*;

public class Solution {
    public boolean hasPath (char[][] matrix, String word) {
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
            return false;
        if (word == null || word.length() == 0) 
            return false;
        int m = matrix.length, n = matrix[0].length;
        char[] wc = word.toCharArray();
        int[][] mark = new int[m][n];
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (has(i, j, matrix, mark, wc, 0)) {
                    return true;
                }
            }
        }
        return false;
    }

    public boolean has(int i, int j, char[][] matrix, int[][] mark,
                       char[] word, int index) {
        if (index == word.length) 
            return true;

        if (i >= matrix.length || i < 0 || j >= matrix[0].length || j < 0) 
            return false;

        boolean hasPath = false;
        if (mark[i][j] == 0 && matrix[i][j] == word[index]) {
            mark[i][j] = 1;
            hasPath = has(i + 1, j, matrix, mark, word, index + 1)
                || has(i - 1, j, matrix, mark, word, index + 1)
                || has(i, j + 1, matrix, mark, word, index + 1)
                || has(i, j - 1, matrix, mark, word, index + 1); 
        } 
        if (!hasPath) { // 关键,如果没有匹配上,要去除mark数组的占位
            mark[i][j] = 0;
        }
        return hasPath;
    }
}
全部评论

相关推荐

06-23 11:43
门头沟学院 Java
allin校招的烤冷面很爱看电影:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务