码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 79 单词搜索

时间:2020-09-18 00:15:55      阅读:27      评论:0      收藏:0      [点我收藏+]

标签:dex   false   ||   raw   master   lan   技术   包含   判断   

Leetcode 79 单词搜索

1. 题目

79. 单词搜索

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

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

示例:

board =
[
  [‘A‘,‘B‘,‘C‘,‘E‘],
  [‘S‘,‘F‘,‘C‘,‘S‘],
  [‘A‘,‘D‘,‘E‘,‘E‘]
]

给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false

提示:

board 和 word 中只包含大写和小写英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

2. 代码

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        int n = board.size();
        int m = board[0].size();
        for(int i = 0; i<n; ++i){
            for(int j = 0; j<m; ++j){
                if(board[i][j] == word[0] && dfs(i, j, board, word, 0)){
                    return true;
                }
            }
        }
        return false;
    }
private:
    bool dfs(int x, int y, vector<vector<char>>& board, string& word, int index){
        int n = board.size();
        int m = board[0].size();
 
        if(x<0 || x>=n || y<0 || y>=m || board[x][y] != word[index]){
            return false;
        }
        if(index == word.size() - 1){
            return true;
        }
        char c = board[x][y];
        board[x][y] = ‘\0‘;
        if(dfs(x + 1, y, board, word, index + 1) 
                || dfs(x - 1, y, board, word, index + 1)
                || dfs(x, y + 1, board, word, index + 1)
                || dfs(x, y - 1, board, word, index + 1)){
            return true;
        }
        board[x][y] = c;
        return false;   
    }
};


技术图片

3. 思路

感觉思路很简单,这里贴一下修改过程。本来交上是60ms 很慢,后面改成了24ms。

60ms优化到24ms的心得:

  1. 去掉循环,直接四个方向用||连接判断
  2. 不用used,在原board上修改(当然这样不一定规范
  3. 结束条件放到检查边界后面,因为结束条件true的次数很少,放前面开销大
  4. 使用if(dfs()) return true;这种模式,可以节约flag变量

不过我还是觉得,代码过于简洁并不是好事,可能刷题显得很酷,但是没用。需要在过度冗余和过度简洁中间找一个平衡点,兼具性能、可读性、可维护性的代码才是好代码。

Leetcode 79 单词搜索

标签:dex   false   ||   raw   master   lan   技术   包含   判断   

原文地址:https://www.cnblogs.com/molinchn/p/13663198.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!