Leedcode 79. 单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中 “相邻” 单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:
输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “ABCCED”
输出:true

示例 2:
输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “SEE”
输出:true

示例 3:
输入:board = [[“A”,”B”,”C”,”E”],[“S”,”F”,”C”,”S”],[“A”,”D”,”E”,”E”]], word = “ABCB”
输出:false

提示:
m == board.length
n = board[i].length
1

class Solution {
    public boolean exist(char[][] board, String word) {
        int m = board.length;
        int n = board[0].length;
        boolean[][] book = new boolean[m][n]; // 默认值为false
//      for (int i = 0; i < m; i++) {
//          Arrays.fill(book[i], false);
//      }
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                boolean flag = dfs(board, word, i, j, 0, book);
                if (flag) {
                    return true;
                }
            }
        }
        return false;
    }
    boolean dfs(char[][] board, String word, int i, int j, int cur, boolean[][] book) {
        if (board[i][j] != word.charAt(cur)) { // 不匹配,直接返回
            return false;
        } else if (cur == word.length()-1) {
            return true;
        }
        book[i][j] = true;
        boolean res = false;
        int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // 上 下 左 右
        for (int[] dir : directions) {
            int new_i = i+dir[0];
            int new_j = j+dir[1];
            if (new_i>=0 && new_i=0 && new_j
  • book[m][n] 用来记录当前状态已匹配的字符序列,已匹配的字符置为 true,并在回溯时恢复为 false;在匹配下个字符时,不搜索 book[i][j] == true 位置的元素,避免字母的重复使用。
  • 搜索起点在主函数中编写(两层 for 循环;每个结点均可作为起点)。
  • “上下左右” 递归写法:dir = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };(代码 27-31 行)。

一道回溯法的中等题,比较容易超时。

Original: https://www.cnblogs.com/higuai/p/16434441.html
Author: 小小小海怪
Title: Leedcode 79. 单词搜索

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588325/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球