zoukankan      html  css  js  c++  java
  • [刷题] 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

    思路

    实现

    • board:要查找的区域
    • word:要查找的字符串
    • index:要查找字符串中的第几个字符
    • startx,starty:查找起始位置
    • inArea():判断是否在查找区域内
    • visited:记录是否访问过
    • 24-26:递归逻辑,先写好这段,再扩充其他部分
    • 15-16:终止条件
     1 class Solution {
     2 
     3 private:
     4     int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
     5     int m,n;
     6     vector<vector<bool>> visited;
     7     
     8     bool inArea( int x , int y ){
     9         return x >= 0 && x < m && y >= 0 && y< n;
    10     }
    11     // 从board[startx][starty]开始,寻找word[index...word.size()] 
    12     bool searchWord( const vector<vector<char>> &board, const string& word, int index,
    13                      int startx, int starty){
    14                          
    15         if( index == word.size() - 1 )
    16             return board[startx][starty] == word[index];
    17             
    18         if(board[startx][starty] == word[index] ){
    19             visited[startx][starty] = true;
    20             // 从startx,starty出发,向四个方向寻找
    21             for( int i = 0 ; i < 4 ; i ++ ){
    22                 int newx = startx + d[i][0];
    23                 int newy = starty + d[i][1];
    24                 if( inArea(newx,newy) && !visited[newx][newy] &&
    25                         searchWord( board, word, index+1, newx, newy ))
    26                         return true;
    27             }
    28             visited[startx][starty] = false;
    29         }
    30         return false;
    31     }    
    32 public:
    33     bool exist(vector<vector<char>>& board, string word) {
    34         
    35         m = board.size();
    36         assert( m > 0);
    37         n = board[0].size();
    38         
    39         visited = vector<vector<bool>>(m, vector<bool>(n, false));
    40         
    41         for( int i = 0 ; i < board.size() ; i ++)
    42             for( int j = 0 ; j < board[i].size() ; j ++ )
    43                 if(searchWord( board, word, 0, i, j ) )
    44                     return true;
    45                     
    46         return false;
    47     }
    48 };
    View Code
  • 相关阅读:
    模块与包的导入
    递归
    day04
    装饰器2_根据认证来源判断用户和计算登录时间
    装饰器1_统计时间函数装饰欢迎登录函数
    tail -f a.txt | grep 'python'
    函数
    内置函数1
    python模块整理
    VBS恶作剧代码
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12710690.html
Copyright © 2011-2022 走看看