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

果不其然啊!!

相关推荐
DoraBigHead42 分钟前
小哆啦解题记——异位词界的社交网络
算法
木头左2 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归
lifallen6 小时前
Paimon LSM Tree Compaction 策略
java·大数据·数据结构·数据库·算法·lsm-tree
web_Hsir8 小时前
vue3.2 前端动态分页算法
前端·算法
地平线开发者10 小时前
征程 6M 部署 Omnidet 感知模型
算法·自动驾驶
秋说11 小时前
【PTA数据结构 | C语言版】线性表循环右移
c语言·数据结构·算法
浩瀚星辰202411 小时前
图论基础算法:DFS、BFS、并查集与拓扑排序的Java实现
java·算法·深度优先·图论
古希腊被code拿捏的神12 小时前
【Flutter】面试记录
flutter·面试·职场和发展
JiaJZhong13 小时前
力扣.最长回文子串(c++)
java·c++·leetcode
oioihoii14 小时前
C++随机打乱函数:简化源码与原理深度剖析
开发语言·c++·算法