zoukankan      html  css  js  c++  java
  • 剑指 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 };
  • 相关阅读:
    关于windows客户端网络编程 WSAAsyncSelect函数
    阻塞模式和非阻塞模式
    SRP6协议分析
    普通二叉树转换成二叉查找树方法
    使用openssl库进行开发
    类型转化,网络开发中常见的类型转化
    到底还能够称多久
    权限子系统小结
    使用ASP.NET AJAX开发服务器端事件通知器
    通用权限相关文档的下载
  • 原文地址:https://www.cnblogs.com/wwqzbl/p/15206059.html
Copyright © 2011-2022 走看看