LeetCode-79. 單詞搜尋
阿新 • • 發佈:2018-12-14
題目描述
給定一個二維網格和一個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重複使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
給定 word = "ABCCED", 返回 true.
給定 word = "SEE", 返回 true.
給定 word = "ABCB", 返回 false.
思路
本題與 695. 島嶼的最大面積 一題類似,利用遞迴判斷是否存在符合要求的字串,需要注意的是不能加入 flag 陣列進行查重判斷,會出現如下情況:
程式碼
class Solution { public: bool exist(vector<vector<char>>& board, string word) { if(board.size()==0) return 0; if(board[0].size()==0) return 0; int m = board.size(); int n = board[0].size(); for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ if(dfs(board,i,j,word,0)) return true; } } return false; } bool dfs(vector<vector<char>>& board, int i, int j, string word, int k){ if(k == word.size()){ return true; } int m = board.size(); int n = board[0].size(); if(i<0 || j<0 || i>=m || j>=n){ return false; } bool res = false; if(board[i][j]==word[k]){ //利用temp避免重複查詢 char temp = board[i][j]; board[i][j] = '/'; res = dfs(board,i-1,j,word,k+1) || dfs(board,i+1,j,word,k+1) || dfs(board,i,j-1,word,k+1) || dfs(board,i,j+1,word,k+1); board[i][j] = temp; } return res; } };