力扣 79.单词搜索+212.单词搜索II


回溯法

  • 单词搜索
  • 单词搜索||

单词搜索 【题目】
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
【思路】
力扣 79.单词搜索+212.单词搜索II
文章图片

【代码】
class Solution { public: int dir[4][4]={{-1,0},{1,0},{0,-1},{0,1}}; //位置坐标 bool dfs(int x,int y,int index,vector>& board,string &word,vector>& visited) { if(index==word.size()-1) return word[index]==board[x][y]; if(word[index]==board[x][y]) { visited[x][y]=true; for(int i=0; i<4; i++) { int new_x=x+dir[i][0]; int new_y=y+dir[i][1]; if(new_x>=0&&new_x=0&&new_y>& board, string word) { int m=board.size(); //行数 int n=board[0].size(); //列数 vector> visited(m,vector(n)); for(int i=0; i

单词搜索|| 【题目】
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
示例:
输入:
words = [“oath”,“pea”,“eat”,“rain”] and board =
[
[‘o’,‘a’,‘a’,‘n’],
[‘e’,‘t’,‘a’,‘e’],
[‘i’,‘h’,‘k’,‘r’],
[‘i’,‘f’,‘l’,‘v’]
]
输出: [“eat”,“oath”]
【思路】
在|版本上增加代码代码,如下:
vector> findWords(vector>& board, vector>& words) { vector>res; for(int i=0; i

结果正确但是超时。
力扣 79.单词搜索+212.单词搜索II
文章图片
力扣 79.单词搜索+212.单词搜索II
文章图片

需要解决问题:
力扣 79.单词搜索+212.单词搜索II
文章图片
【改进】
前缀树,代码摘自一个大佬,做了相关注释
【注释】
力扣 79.单词搜索+212.单词搜索II
文章图片

【代码】
class TrieNode{ public: string word = ""; vector nodes; TrieNode():nodes(26, 0){} }; class Solution { int rows, cols; vector> res; public: vector> findWords(vector>& board, vector>& words) { rows = board.size(); cols = rows ? board[0].size():0; if(rows==0 || cols==0) return res; //建立字典树的模板 TrieNode* root = new TrieNode(); for(string word:words){ TrieNode *cur = root; for(int i=0; inodes[idx]==0) cur->nodes[idx] = new TrieNode(); cur = cur->nodes[idx]; } cur->word = word; }//DFS模板 for(int i=0; i>& board, TrieNode* root, int x, int y){ char c = board[x][y]; //递归边界 if(c=='.' || root->nodes[c-'a']==0) return; root = root->nodes[c-'a']; if(root->word!=""){ res.insert(res.begin(),root->word); root->word = ""; }board[x][y] = '.'; if(x>0) dfs(board, root, x-1, y); if(y>0) dfs(board, root, x, y-1); if(x+1

【力扣 79.单词搜索+212.单词搜索II】【结果】
力扣 79.单词搜索+212.单词搜索II
文章图片

    推荐阅读