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;
    }
}

总结

回溯法。

相关推荐
AI小老六3 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术4 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize4 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考18 小时前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
美团技术团队21 小时前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK2 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
_清歌2 天前
DSpark 深度解读:DeepSeek-V4 如何用「半自回归」把推理速度提升 85%
算法