leetcode刷題筆記七十九題 單詞搜尋
阿新 • • 發佈:2020-07-23
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 } }