leetcode日记(67)单词搜索

太坑了!老是时间超限,不是时间超限就是内存超限!

思路很简单,就是先遍历整个网格寻找开头,然后上下左右搜寻找下一个字母,引用递归。

最终看边答案边写出来的:

cpp 复制代码
class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        m=board.size();
        n=board[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(hs(board,word,i,j,0)==1) return 1;
            }
        }
        return 0;
    }
private:
    int m,n;
    bool hs(vector<vector<char>> &board,string word,int x,int y,int k){
        if(word[k]!=board[x][y]) return 0;
        if(k==word.size()-1) return 1;
        board[x][y]='/0';
        bool b=0;
        k++;
        if(x>0) b=b||hs(board,word,x-1,y,k);
        if(y>0) b=b||hs(board,word,x,y-1,k);
        if(x<m-1) b=b||hs(board,word,x+1,y,k);
        if(y<n-1) b=b||hs(board,word,x,y+1,k);
        board[x][y]=word[k-1];
        return b;
    }
};

看了下面的评论老哥,学到了一个时间超限的知识点...

意思是函数直接传入值比传入指针慢很多(可以解释为什么我照着答案抄都抄不对了),于是又去试了一下,将递归函数的传入参数都尽量改成了指针:

cpp 复制代码
class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        m=board.size();
        n=board[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                int k=0;
                if(hs(board,word,i,j,k)==1) return 1;
            }
        }
        return 0;
    }
private:
    int m,n;
    bool hs(vector<vector<char>> &board,string &word,int x,int y,int &k){
        if(word[k]!=board[x][y]) return 0;
        if(k==word.size()-1) return 1;
        board[x][y]='/0';
        bool b=0;
        k++;
        if(x>0) b=b||hs(board,word,x-1,y,k);
        if(y>0) b=b||hs(board,word,x,y-1,k);
        if(x<m-1) b=b||hs(board,word,x+1,y,k);
        if(y<n-1) b=b||hs(board,word,x,y+1,k);
        k--;
        board[x][y]=word[k];
        return b;
    }
};

果不其然啊!!

相关推荐
j4455661111 小时前
C++中的职责链模式高级应用
开发语言·c++·算法
uesowys11 小时前
Apache Spark算法开发指导-Decision tree classifier
算法·决策树·spark
池央11 小时前
贪心算法-最大数
算法·贪心算法
iAkuya11 小时前
(leetcode)力扣100 57电话号码的字母组合(回溯)
算法·leetcode·深度优先
m0_7369191011 小时前
模板元编程性能分析
开发语言·c++·算法
win x11 小时前
JavaSE(基础)高频面试点及 知识点
java·面试·职场和发展
pen-ai12 小时前
【YOLO系列】 YOLOv1 目标检测算法原理详解
算法·yolo·目标检测
2301_7657031412 小时前
C++中的职责链模式实战
开发语言·c++·算法
StandbyTime12 小时前
《算法笔记》学习记录-第一章
c++·算法·算法笔记
近津薪荼12 小时前
优选算法——双指针8(单调性)
数据结构·c++·学习·算法