zoukankan      html  css  js  c++  java
  • leetcode刷题笔记七十九题 单词搜索

    leetcode刷题笔记七十九题 单词搜索

    源地址:79. 单词搜索

    问题描述:

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

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

    示例:

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

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

    /**
    本题也是一道回溯法相关的题目
    与之前的回溯问题不同的是,我们要在上下左右四个方向上进行回溯
    需要注意的是对边界问题的处理
    */
    object Solution {
        def exist(board: Array[Array[Char]], word: String): Boolean = {
            //特殊情况处理
            val row = board.length
            if (row == 0) return false
            val col = board(0).length
            val strLen = word.length
    
            def dfs(rowY: Int, colX: Int, length: Int): Boolean = {
                //从0开始,length时所有字母已经匹配
                if(length == word.length) return true
                //判断是否越界 及 单词是否对应
                else if(rowY < 0 || rowY >= row || colX < 0 || colX >= col || board(rowY)(colX) != word(length)) return false
                //单个匹配情况下进行回溯
                else {
                    val tempChar = board(rowY)(colX)
                    //标记已使用字符
                    board(rowY)(colX) = '#'
                    //从四个方向进行探索
                    val ans = dfs(rowY, colX-1,length+1) || dfs(rowY-1, colX,length+1) || dfs(rowY, colX+1,length+1) || dfs(rowY+1, colX,length+1)
                    //回溯
                    board(rowY)(colX) = tempChar
                    return ans
                }
            }
    
            for(i <- 0 to row-1; j <- 0 to col-1){
                if (dfs(i, j, 0) == true)
                return true
            }
            return false
        }
    }
    
  • 相关阅读:
    Code::blocks 使用c++ long double类型出错
    数论四大定理
    线性基
    win7 下强制删除文件
    C++数组指针的引用
    学习方法
    MySQL的ON DUPLICATE KEY UPDATE用法
    MVCC
    RabbitMQ中的Connection 和 Channel
    myisam和innodb的比较
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13367587.html
Copyright © 2011-2022 走看看