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

总结

回溯法。

相关推荐
数研小生10 小时前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
芒克芒克10 小时前
LeetCode 题解:除自身以外数组的乘积
算法·leetcode
Python 老手10 小时前
Python while 循环 极简核心讲解
java·python·算法
@Aurora.11 小时前
优选算法【专题九:哈希表】
算法·哈希算法·散列表
爱看科技11 小时前
微美全息(NASDAQ:WIMI)研究拜占庭容错联邦学习算法,数据安全与隐私保护的双重保障
算法
qq_4171292511 小时前
C++中的桥接模式变体
开发语言·c++·算法
YuTaoShao12 小时前
【LeetCode 每日一题】3010. 将数组分成最小总代价的子数组 I——(解法二)排序
算法·leetcode·排序算法
XH华13 小时前
备战蓝桥杯,第七章:函数与递归
职场和发展·蓝桥杯
吴维炜13 小时前
「Python算法」计费引擎系统SKILL.md
python·算法·agent·skill.md·vb coding
Σίσυφος190014 小时前
PCL Point-to-Point ICP详解
人工智能·算法