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;
    }
};

果不其然啊!!

相关推荐
Swift社区8 小时前
LeetCode 394. 字符串解码(Decode String)
算法·leetcode·职场和发展
tt5555555555559 小时前
LeetCode进阶算法题解详解
算法·leetcode·职场和发展
让我们一起加油好吗9 小时前
【基础算法】DFS中的剪枝与优化
算法·深度优先·剪枝
Q741_1479 小时前
C++ 模拟题 力扣495. 提莫攻击 题解 每日一题
c++·算法·leetcode·模拟
我命由我1234510 小时前
Excel - Excel 列出一列中所有不重复数据
经验分享·学习·职场和发展·word·powerpoint·excel·职场发展
Felven10 小时前
A. Be Positive
算法
小O的算法实验室10 小时前
2026年COR SCI2区,自适应K-means和强化学习RL算法+有效疫苗分配问题,深度解析+性能实测,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
青岛少儿编程-王老师11 小时前
CCF编程能力等级认证GESP—C++7级—20250927
数据结构·c++·算法
夏鹏今天学习了吗11 小时前
【LeetCode热题100(39/100)】对称二叉树
算法·leetcode·职场和发展
天选之女wow12 小时前
【代码随想录算法训练营——Day34】动态规划——416.分割等和子集
算法·leetcode·动态规划