LeetCodeDay54 —— 单词搜索★★

79. 单词搜索 Word Search

描述
  • Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.
示例
board =
  [
    ['A','B','C','E'],
    ['S','F','C','S'],
    ['A','D','E','E']
  ]
Given word = "ABCCED", return true.
Given word = "SEE", return true.
Given word = "ABCB", return false.
思路
  1. 从每个字母开始,依次向上、下、左、右四个方向延续,如果满足则继续,不满足就返回。很典型的回溯算法。
  2. 注意每次遍历的时候需要标记当前节点为已访问,否则会出现圈,造成死循环。
class Solution {
 public:
  bool exist(vector<vector<char>>& board, string word) {
    if (board.empty() || board[0].empty()) return false;
    vector<vector<bool>> tag;
    vector<bool> tmp(board[0].size(), false);
    for (int i = 0; i < board.size(); ++i) {
      tag.push_back(tmp);
    }
    for (int i = 0; i < board.size(); ++i) {
      for (int j = 0; j < board[0].size(); ++j) {
        bool isFind = _exist(0, i, j, word, board, tag);
        if (isFind) return true;
      }
    }
    return false;
  }
  bool _exist(int k, int row, int col, string& word,
              vector<vector<char>>& board, vector<vector<bool>>& tag) {
    bool isFind = false;
    if (row < 0 || row >= board.size() || col < 0 || col >= board[0].size()) {
      return isFind;
    }
    if (!tag[row][col] && board[row][col] == word[k]) {
      if (k == word.size() - 1) return true;
      tag[row][col] = true;
      isFind = _exist(k + 1, row - 1, col, word, board, tag) ||
               _exist(k + 1, row + 1, col, word, board, tag) ||
               _exist(k + 1, row, col - 1, word, board, tag) ||
               _exist(k + 1, row, col + 1, word, board, tag);
      tag[row][col] = false;
    }
    return isFind;
  }
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,948评论 0 10
  • 从知道张嘉佳的《从你的全世界路过》要拍成电影,就一直在等着。等的时间有点长,渐渐没了激情。 1 电影终于上映了,我...
    林浮生阅读 527评论 2 1
  • 啊,矛盾 镌刻在我心石上 直到被时间刺死 快看那大理石砌成的天边 落日像鲜血直流的野兽 穿过失落的树林 落荒而逃 ...
    泡沫之夏音乐会阅读 249评论 1 0
  • 2017年,工作上,我继续在出版行业,遇到了一些不顺,但最终顺利解决;我居然真的摆脱了靠点击量和莫名其妙的话题指示...
    宇宙小毛球阅读 352评论 0 0
  • 11 无论进军哪个行业,别先急着挣钱,要先让自己变得值钱。
    一个人你和我阅读 241评论 0 0

友情链接更多精彩内容