解題思路
base case 是 word 只剩一個字而且是要找的字。以及錯誤判斷寫對。
isVisited 要先標記走過,接著遞迴下去找,最後記得改回來。
程式碼
class Solution { public: bool search(vector<vector<char>>& board, string word, vector<vector<bool>>& isVisited, int x, int y) { if(x < 0 || y < 0 || x >= board.size() || y >= board[0].size()) return false; if(isVisited[x][y] || word[0] != board[x][y]) return false; if(word.size() == 1 && word[0] == board[x][y]) return true; isVisited[x][y] = true; bool isFind = search(board, word.substr(1), isVisited, x-1, y) || search(board, word.substr(1), isVisited, x+1, y) || search(board, word.substr(1), isVisited, x, y-1) || search(board, word.substr(1), isVisited, x, y+1); isVisited[x][y] = false; return isFind; } bool exist(vector<vector<char>>& board, string word) { vector<vector<bool>> isVisited(board.size(), vector<bool>(board[0].size(), false)); for(int i=0; i<board.size(); i++) { for(int j=0; j<board[0].size(); j++) { if(search(board, word, isVisited, i, j)) return true; } } return false; } };
沒有留言:
張貼留言