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

总结

回溯法。

相关推荐
net3m338 小时前
一阶软件低通滤波器算法
人工智能·算法
水木流年追梦9 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
J-Tony119 小时前
【JVM】三色标记法
java·jvm·算法
wengad9 小时前
机器学习实践理论基础|算法、模型和数据集
人工智能·算法·机器学习
嵌入式ZYXC9 小时前
第3篇:《面试题:I2C为什么要加上拉电阻?阻值怎么选?》
stm32·单片机·嵌入式硬件·面试·职场和发展
sbjdhjd10 小时前
面试(5)| 3.5 小时面试复盘第五弹:加班出差 + 客户响应 + 压力面全拆解
经验分享·程序人生·面试·职场和发展·开源·跳槽·求职招聘
梦梦代码精10 小时前
为什么这个开源的AI平台会火?有点东西。。。
人工智能·算法·机器学习·docker·开源
随意起个昵称11 小时前
线性dp-综合刷题1(Not Alone)
算法·动态规划
如何原谅奋力过但无声12 小时前
【灵神高频面试题合集09-13】二叉树、二叉搜索树
数据结构·算法·leetcode
皆圥忈12 小时前
磁盘物理结构与文件系统基础讲解
linux·算法