• 剑指 Offer 12. 矩阵中的路径


    1. 题目

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

    单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

    2. 示例

    示例1:

    输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
    输出:true

    示例2:

    输入:board = [["a","b"],["c","d"]], word = "abcd"
    输出:false

    提示:

    1 <= board.length <= 200
    1 <= board[i].length <= 200
    board 和 word 仅由大小写英文字母组成

    3. 题解

    这道题很明显的回溯思路。

    思考:

    1. 起点是什么?任何一个点都可以为起点,所以遍历整个二维数组。

    2. 如何让它不走重复走已经走过的点?将走过的点置为''。

    3. 什么时候回溯?当走到边界或者当前元素不等。

    (i < 0 || j < 0 || i >= board.length || j >= board[0].length || board[i][j] != words[k])

     4. 结束条件?word的最后一个元素找到后。

    4. 实现

    public class Exist12 {
        public boolean exist(char[][] board, String word) {
            char[] words = word.toCharArray();
            for(int i = 0; i < board.length; i++) {
                for (int j = 0; j < board[0].length; j++) {
                    if(board[i][j] == words[0]) {
                        return dfs(board, words, i, j, 0);
                    }
                }
            }
            return false;
        }
        private boolean dfs(char[][] board, char[] words, int i, int j, int k) {
            if(i < 0 || j < 0 || i >= board.length || j >= board[0].length || board[i][j] != words[k]) return false;
            if(k == words.length - 1) return true;
            board[i][j] = '';
            boolean res = dfs(board, words, i + 1, j, k + 1) || dfs(board, words, i, j + 1, k + 1)
                            || dfs(board, words, i, j - 1, k + 1) || dfs(board, words, i - 1, j, k + 1);
            board[i][j] = words[k];
            return res;
        }
    }

    5. 结语

      努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

      如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

    但行好事 莫问前程
  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/haifwu/p/14948089.html
Copyright © 2020-2023  润新知