LeetCode079——单词搜索

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/word-search/description/

题目描述:

LeetCode079——单词搜索_第1张图片

知识点:递归,回溯

思路:回溯法判断单词的存在性

这是一个二维平面上的回溯法的应用的经典例题。

我们在board数组里首先定位到word字符串的第0个元素所在的二维坐标(i, j)的值,然后从该(i, j)点按照上右下左4个方向的顺序取寻找下一个字符,如果找到,将该位置标记为已经被访问过,就继续递归地调用该函数继续寻找下一个字符,如果该函数返回的是true,表示能寻找到下一个字符,我们直接返回true。否则,我们需要退回到上一步,即取消对该位置已经访问过这一标记(变量的手动回溯!!!)。

如果4个方向都没有找到下一个字符,则直接返回false。

时间复杂度,需要递归O(len(word))层,每层所做的操作都是O(1)的复杂度,故时间复杂度为O(len(word))。而空间复杂度即递归深度,为O(len(word))。

JAVA代码:

public class Solution {

    boolean[][] flag;
    int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

    public boolean exist(char[][] board, String word) {
        int m = board.length;
        if(m == 0){
            return word.length() == 0;
        }
        int n = board[0].length;
        flag = new boolean[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if(board[i][j] == word.charAt(0)){
                    flag[i][j] = true;
                    if(exist(board, word, 1, i, j)){
                        return true;
                    }
                    flag[i][j] = false;
                }
            }
        }
        return false;
    }

    //We have found [0, index] of word in board, trying to find index + 1.
    //Now we are in (x, y)
    private boolean exist(char[][] board, String word, int index, int x, int y){
        if(index == word.length()){
            return true;
        }
        for (int i = 0; i < directions.length; i++) {
            int newX = x + directions[i][0];
            int newY = y + directions[i][1];
            if(newX >=0 && newX < board.length && newY >= 0 && newY < board[0].length){
                if(!flag[newX][newY] && board[newX][newY] == word.charAt(index)){
                    flag[newX][newY] = true;
                    if(exist(board, word, index + 1, newX, newY)){
                        return true;
                    }
                    flag[newX][newY] = false;
                }
            }
        }
        return false;
    }
}

LeetCode解题报告:

LeetCode079——单词搜索_第2张图片

 

你可能感兴趣的:(LeetCode题解)