Middle-题目108:79. Word Search

题目原文:
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where “adjacent” cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
For example,
Given board =
[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]
word = “ABCCED”, -> returns true,
word = “SEE”, -> returns true,
word = “ABCB”, -> returns false.
题目大意:
给出一个矩阵,和一个单词,判断单词是否能由矩阵中一条路径连接出来。
题目分析:
一个简单的dfs,教科书式的dfs写法即可,搜到字母错误或者搜到数组边缘则退出,否则每次向四个方向搜索,注意这里的dfs是有返回值的,返回该条件下是否有解。
源码:(language:java)

public class Solution {
    public boolean exist(char[][] board, String word) {
        int row = board.length;
        if(row==0)
            return false;
        int col = board[0].length;
        boolean[][] visited = new boolean[row][col];
        for(int i = 0;i<row;i++) {
            for(int j=0;j<col;j++) {            
                if(word.charAt(0) == board[i][j]) {
                    if(dfs(board, i, j, visited, word, 0))
                        return true;  
                }
            }
        }
        return false;
    }

    private boolean dfs(char[][] board, int i, int j, boolean[][] visited, String word, int index) {
        if(index == word.length())
            return true;
        else if(i<0 || i>board.length-1 || j<0 || j>board[0].length-1 || word.charAt(index)!=board[i][j] || visited[i][j])
            return false;
        else {
            visited[i][j]=true;
            boolean result = dfs(board, i-1, j, visited, word, index+1) || dfs(board, i+1, j, visited, word, index+1) || dfs(board, i, j-1, visited, word, index+1) || dfs(board, i, j+1, visited, word, index+1);
            visited[i][j] = false;
            return result;
        }

    }
}

成绩:
13ms,beats 58.16%,众数14ms,14.58%
cmershen的碎碎念:
本题基本上是一个教科书式的dfs,区别是dfs带有返回值判断是否有解。

阅读更多
版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs https://blog.csdn.net/cmershen/article/details/51548595
个人分类: Leetcode
上一篇Middle-题目107:61. Rotate List
下一篇Middle-题目109:143. Reorder List
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭