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


    通过率 45.3%

    题目链接

    题目描述:

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

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

    例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。

    示例 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 仅由大小写英文字母组成

    思路:

    深搜

     1 /*JavaScript*/
     2 /**
     3  * @param {character[][]} board
     4  * @param {string} word
     5  * @return {boolean}
     6  */
     7 var dfs = function(board, n, m, i, j, word, k) {
     8     if(k === word.length) return true
     9     if(i < 0 || j < 0 || i >= n || j >= m || board[i][j] !== word[k]) return false
    10     board[i][j] = '*'
    11     const res = dfs(board, n, m, i-1, j, word, k+1) || dfs(board, n, m, i, j+1, word, k+1) || dfs(board, n, m, i+1, j, word, k+1) || dfs(board, n, m, i, j-1, word, k+1)
    12     board[i][j] = word[k]
    13     return res
    14 }
    15 
    16 var exist = function(board, word) {
    17     const n = board.length
    18     const m = board[0].length
    19     for(let i = 0; i < n; i++) {
    20         for(let j = 0; j < m; j++) {
    21             if(dfs(board, n, m, i, j, word, 0)) return true
    22         }
    23     }
    24     return false
    25 };
  • 相关阅读:
    Redis过期机制
    vim使用
    ex command in Linux with examples
    【转】Linux 文档编辑 : ex 命令详解
    vscode go语言环境搭建
    golang slice a 的地址和a[0]的地址不一样
    文件加锁,作用是用来做什么?以及使用细节
    文件锁
    go创建指定大小的文件,获取文件大小
    go 实现内存映射和进程间通信
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15206059.html
Copyright © 2020-2023  润新知