LeetCode第79题 - 单词搜索

题目

解答

java 复制代码
class Solution {
    public boolean exist(char[][] board, String word) {
        int rowLength = board.length;
        int colomnLength = board[0].length;

        boolean[][] boardUsed = new boolean[rowLength][colomnLength];

        for (int i = 0; i < rowLength; ++i) {
            Arrays.fill(boardUsed[i], false);
        }

        char firstChar = word.charAt(0);
        for (int row = 0; row < rowLength; ++row) {
            for (int colomn = 0; colomn < colomnLength; ++colomn) {
                if (board[row][colomn] == firstChar) {
                    for (int i = 0; i < rowLength; ++i) {
                        Arrays.fill(boardUsed[i], false);
                    }

                    boardUsed[row][colomn] = true;
                    if (exist(board, word, 1, boardUsed, row, colomn)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    public boolean exist(char[][] board, String word, int index, boolean[][] boardUsed, int rowIndex, int colomnIndex) {

        if (index >= word.length()) {
            return true;
        }

        int rowLength = board.length;
        int colomnLength = board[0].length;

        int nextIndex = index + 1;
        char c = word.charAt(index);
        boardUsed[rowIndex][colomnIndex] = true;
        int nextRow = 0;
        int nextColomn = 0;
        // 上一行
        {
            nextRow = rowIndex - 1;
            nextColomn = colomnIndex;
            if (nextRow >= 0 && !boardUsed[nextRow][nextColomn] && board[nextRow][nextColomn] == c) {
                if (exist(board, word, nextIndex, boardUsed, nextRow, nextColomn)) {
                    return true;
                } else {
                    boardUsed[nextRow][nextColomn] = false;
                }
            }
        }
        // 下一行
        {
            nextRow = rowIndex + 1;
            nextColomn = colomnIndex;

            if (nextRow < rowLength && !boardUsed[nextRow][nextColomn] && board[nextRow][nextColomn] == c) {

                if (exist(board, word, nextIndex, boardUsed, nextRow, nextColomn)) {
                    return true;
                } else {
                    boardUsed[nextRow][nextColomn] = false;
                }
            }
        }
        // 左边
        {
            nextRow = rowIndex;
            nextColomn = colomnIndex - 1;
            if (nextColomn >= 0 && !boardUsed[nextRow][nextColomn] && board[nextRow][nextColomn] == c) {
                if (exist(board, word, nextIndex, boardUsed, nextRow, nextColomn)) {
                    return true;
                } else {
                    boardUsed[nextRow][nextColomn] = false;
                }
            }
        }
        // 右边
        {
            nextRow = rowIndex;
            nextColomn = colomnIndex + 1;

            if (nextColomn < colomnLength && !boardUsed[nextRow][nextColomn] && board[nextRow][nextColomn] == c) {
                if (exist(board, word, nextIndex, boardUsed, nextRow, nextColomn)) {
                    return true;
                } else {
                    boardUsed[nextRow][nextColomn] = false;
                }
            }
        }

        return false;
    }
}

总结

回溯法。

相关推荐
C雨后彩虹4 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧6 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)6 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo7 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a3158238067 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚7 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴7 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje8 小时前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici158748 小时前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-1758 小时前
拓扑导航 vs 几何导航的具体实现位置
算法