zoukankan      html  css  js  c++  java
  • LeetCode 79. 单词搜索(Word Search)

    题目描述

    给定一个二维网格和一个单词,找出该单词是否存在于网格中。

    单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

    示例:

    board =
    [
      ['A','B','C','E'],
      ['S','F','C','S'],
      ['A','D','E','E']
    ]
    
    给定 word = "ABCCED", 返回 true.
    给定 word = "SEE", 返回 true.
    给定 word = "ABCB", 返回 false.

    解题思路

    本题可用回溯法来求解。定义一个访问数组初始全部置为0,并定义当前路径长度初始置0,从矩阵第一个字符开始遍历:

    • 从当前字符出发,若与字符串对应路径长度的字符相等,就分别向上下左右走一步,并把当前字符访问数组置1,路径长度加1;
    • 若当前字符走到了字符串末尾,说明存在一条路径与字符串相等,返回true;
    • 若当前字符出发的各条路径都不能找到一条路径与字符串相等,则向当前路径上一步回溯,并把当前字符访问数组置0,路径长度减1

    代码

     1 class Solution {
     2 public:
     3     bool exist(vector<vector<char>>& board, string word) {
     4         if(board.empty()||word=="")
     5             return false;
     6         int rows=board.size();
     7         int cols=board[0].size();
     8         for(int i=0;i<rows;i++){
     9             for(int j=0;j<cols;j++){
    10                 vector<vector<bool>> visit(rows,vector<bool>(cols,false));
    11                 if(find(visit,board,word,0,i,j))
    12                     return true;
    13             }
    14         }
    15         return false;
    16     }
    17     bool find(vector<vector<bool>> &visit, vector<vector<char>>& board, string word, int idx, int row, int col){
    18         if(idx==word.size())
    19             return true;
    20         int rows=board.size();
    21         int cols=board[0].size();
    22         if(row<rows&&row>=0&&col<cols&&col>=0&&!visit[row][col]&&board[row][col]==word[idx]){
    23             visit[row][col]=true;
    24             bool hasPath=find(visit,board,word,idx+1,row+1,col)||find(visit,board,word,idx+1,row,col+1)||
    25                 find(visit,board,word,idx+1,row-1,col)||find(visit,board,word,idx+1,row,col-1);
    26             if(!hasPath)
    27                 visit[row][col]=false;
    28             else
    29                 return true;
    30         }
    31         return false;
    32     }
    33 };
  • 相关阅读:
    前端/html5效果收藏
    Fiddler 网页采集抓包利器
    Es6 类class的关键 super、static、constructor、new.target
    js 倒计时毫秒级别显示
    雅虎34条军规
    javascript 异步请求封装成同步请求
    微信小程序 base64图片在canvas上画图
    chrome inspect 远程调试H5
    webpack 打包调试
    微信小程序云函数 添加数据到数据库
  • 原文地址:https://www.cnblogs.com/wmx24/p/9025879.html
Copyright © 2011-2022 走看看