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

果不其然啊!!

相关推荐
滴滴答滴答答9 分钟前
机考刷题之 9 LeetCode 503 下一个更大元素 II
算法·leetcode·职场和发展
飞Link11 分钟前
梯度下降的优化算法中,动量算法和指数加权平均的区别对比
人工智能·深度学习·算法
啊哦呃咦唔鱼20 分钟前
LeetCode hot100-15 三数之和
数据结构·算法·leetcode
_日拱一卒22 分钟前
LeetCode(力扣):杨辉三角||
算法·leetcode·职场和发展
rqtz25 分钟前
基于I2C总线的IMU-磁力计融合算法与数据共享
算法·iic·espidf·qmc5883p·icm42670p·imu磁力计融合
leluckys31 分钟前
算法-链表-二、成对交换两个节点
数据结构·算法·链表
小糯米60140 分钟前
C++ 排序
c++·算法·排序算法
未来之窗软件服务1 小时前
幽冥大陆(一百12)js打造json硬件管道——东方仙盟筑基期
开发语言·javascript·算法·json·仙盟创梦ide·东方仙盟·东方仙盟算法
放下华子我只抽RuiKe51 小时前
AI大模型开发-实战精讲:从零构建 RFM 会员价值模型(进阶挑战版)
人工智能·深度学习·算法·机器学习·数据挖掘·数据分析·聚类