zoukankan      html  css  js  c++  java
  • LeetCode一刷:回溯算法-单词搜索

    题目:

    单词搜索
    给定一个二维网格和一个单词,找出该单词是否存在于网格中。

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

    示例:

    board =
    [
    ['A','B','C','E'],
    ['S','F','C','S'],
    ['A','D','E','E']
    ]

    给定 word = "ABCCED", 返回 true
    给定 word = "SEE", 返回 true
    给定 word = "ABCB", 返回 false
     

    提示:

    board 和 word 中只包含大写和小写英文字母。
    1 <= board.length <= 200
    1 <= board[i].length <= 200
    1 <= word.length <= 10^3

    作者:力扣 (LeetCode)
    链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-medium/xvkwe2/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    分析:

    深度优先搜索+递归回溯

    代码:

    /**
     * @param {Array} tempList
     * 
     * 
     */
    var dfs = function(tempList, board, word, index, i, j, flag){
        if(flag[i][j]) return;
        if(board[i][j] === word[index]){
            flag[i][j]  = true;
            tempList.push(board[i][j]);
    
            if(tempList.length === word.length) return true;
          
    /* 上下左右四个方向搜索,遇到flag[i][j]标记为true就直接返回,表明已搜索过 */
    if(i+1<board.length) { if(dfs(tempList, board, word, index+1, i+1, j, flag)){ return true; } } if(i-1>=0) { if(dfs(tempList, board, word, index+1, i-1, j, flag)){ return true; } } if(j+1<board[0].length) { if(dfs(tempList, board, word, index+1, i, j+1, flag)){ return true; } } if(j-1>=0) { if(dfs(tempList, board, word, index+1, i, j-1, flag)){ return true; } } tempList.pop(); flag[i][j] = false; } }; /** * @param {character[][]} board * @param {string} word * @return {boolean} */ var exist = function(board, word) { var row = board.length; var col = board[0].length; var flag = new Array(row); for(let i=0; i<row; i++) { let a = []; for(let j=0; j<col; j++) { a[j] = false; } flag[i] = a; } let res = false; for(let i=0; i<row; i++) { for(let j=0; j<col; j++) { if(dfs([], board, word, 0, i, j, flag)){ return true; } } } return false; };
  • 相关阅读:
    BZOJ3064: Tyvj 1518 CPU监控
    BZOJ3160: 万径人踪灭
    BZOJ3527: [Zjoi2014]力
    BZOJ2194: 快速傅立叶之二
    FFT模板
    Splay树再学习
    POJ2406 Power Strings KMP算法
    POJ2752 Seek the Name,Seek the Fame KMP算法
    POJ3461 Oulipo KMP算法
    POJ2004 Mix and build Trie树? dp?
  • 原文地址:https://www.cnblogs.com/davidxu/p/13660482.html
Copyright © 2011-2022 走看看