力扣 剑指 Offer 12. 矩阵中的路径

超时代码
dfs返回值是void,用类内的全局变量flag表示找到或没找到。

class Solution {
public:
bool flag;
int vis[210][210];
int dir[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };
int m, n;
void dfs(int x, int y, int count, string& word, vector<vector<char>>& board) {
if (board[x][y] != word[count]) {
return;
}
if (count == word.size() - 1) {
flag = true;
return;
}
for (int i = 0; i < 4; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (nx >= 0 && nx <= m - 1 && ny >= 0 && ny <= n - 1 && vis[nx][ny] == 0) {
vis[nx][ny] = 1;
dfs(nx, ny, count + 1, word, board);
vis[nx][ny] = 0;
}
}
} bool exist(vector<vector<char>>& board, string word) {
m = board.size();
n = board[0].size();
int sn = word.size();
flag = false;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
memset(vis, 0, sizeof(vis));
vis[i][j] = 1;
dfs(i, j, 0, word, board);
vis[i][j] = 0;
if (flag) break;
}
}
return flag;
}
};

通过代码
将dfs返回值改为bool类型就通过了。分析原因可能是找到一条满足的路径后立即返回,如果没有返回值,还要将整个dfs执行完才能结束,可能递归调用和栈的一些操作浪费了一些时间(这从时间复杂度角度不好分析)

class Solution {
public:
bool flag;
int vis[210][210];
int dir[4][2] = { {1,0},{0,1},{-1,0},{0,-1} };
int m, n;
bool dfs(int x, int y, int count, string& word, vector<vector<char>>& board) {
if (board[x][y] != word[count]) {
return false;
}
if (count == word.size() - 1) {
flag = true;
return true;
}
for (int i = 0; i < 4; i++) {
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if (nx >= 0 && nx <= m - 1 && ny >= 0 && ny <= n - 1 && vis[nx][ny] == 0) {
vis[nx][ny] = 1;
if (dfs(nx, ny, count + 1, word, board)) return true;
vis[nx][ny] = 0;
}
}
return false;
} bool exist(vector<vector<char>>& board, string word) {
m = board.size();
n = board[0].size();
flag = false;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
memset(vis, 0, sizeof(vis));
vis[i][j] = 1;
if (dfs(i, j, 0, word, board)) return true;
vis[i][j] = 0;
if (flag) return true;
}
}
return false;
}
};

dfs 返回值用bool相对void会快一点的更多相关文章

  1. C# 调用 C++ 的 DLL 返回值为 bool 时,值混乱

    现象:C++ 导出函数的返回值为 false,C# 调用该函数获取的返回值却为 true . 原因:C++ 导出函数返回 false 时,采取的方式是: 将 C# 定义的用来接收返回值的 bool 所 ...

  2. malloc 返回值的类型是 void *

    malloc 返回值的类型是 void *,所以在调用 malloc 时要显式地进行类型转换,将 void * 转换成所需要的指针类型. #include <iostream> using ...

  3. jQuery find() 搜索所有段落中的后代 C# find() 第一个匹配元素 Func 有返回值 Action是没有返回值 Predicate 只有一个参数且返回值为bool 表达式树Expression

    所有p后代span Id为 TotalProject 的 select 标签 的后代 option标签 为选中的 text using System; using System.Collections ...

  4. std::vector<bool> 在 auto 推断下的返回值是 bool & 引用

    转自: https://www.cnblogs.com/hustxujinkang/p/5218148.html //////////// std::vector<bool> featur ...

  5. void in javascript是一个指定要计算表达式但不返回值的运算符

    void in javascript是一个指定要计算表达式但不返回值的运算符.void运算符使用格式如下:1.javascript:void(表达式)2.javascript:void表达式表达式是要 ...

  6. 关于"cin>>"输入成功或失败时的“返回值”(转载)

    今天在看c++primer的时候,读到其中这样一段话: When we use an istream as a condition, the effect is to test the state o ...

  7. iOS用三种途径实现一方法有多个返回值

    以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...

  8. 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向

    数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...

  9. 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用

    来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...

  10. springmvc返回值、数据写到页面、表单提交、ajax、重定向

    实验是在前一篇文章的项目上做的: 数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView(" ...

随机推荐

  1. java中的垃圾回收算法与垃圾回收器

    常用的垃圾回收算法 标记-清除 标记清除算法是一种非移动式的回收算法,分为标记 清除 2个阶段,简而言之就是先标记出需要回收的对象,标记完成后再回收掉所有标记的内存对象,如下图 可见回收后图中被标记的 ...

  2. 一篇文章带你了解NoSql数据库——Redis简单入门

    一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...

  3. Debian玩红警2

    Debian玩红警2 1. 安装wine sudo apt update sudo apt install wine wine --version wine-5.0.3 (Debian 5.0.3-3 ...

  4. 只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...

  5. Rocky之Mysql-MHA高可用

    9.半同步复制 安装插件三种方法: 第一种: mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so' 安装 在 ...

  6. Linux系统安装python

    1. 安装python3 1.1 下载python3安装包及其依赖包(该步骤可忽略,步骤1.2 提供应用包链接) ① 在python官网下载所需的python3,或者用外网centos机器的wget命 ...

  7. perl哈希嵌套和引用的使用

    数组,哈希嵌套 数组,哈希的引用 1.哈希的嵌套和引用 %hash = ( 'group1', {'fruit', 'banana', 'drink', 'orange juice', 'vegeta ...

  8. EventBridge助力阿里云视觉智能开放平台AI智能存储实践

    本文作者:李建,阿里巴巴达摩院技术专家. 01 视觉智能开放平台(VIAPI)业务场景介绍 阿里云视觉智能开放平台(简称 VIAPI),是基于之前很多技术实践经验积累的 AI 能力的沉淀平台.目前整个 ...

  9. 833(DIV2)——C题题解

    题目链接 题目大意: 给定n个数,你可以对数值为0的数改变其为任意值,问最后前缀和为0的个数的最大值. 思路: 这题比较可惜,自己的思路没有问题,但是他少了一些东西.对数组进行前缀和处理,我们可以发现 ...

  10. 这次,听人大教授讲讲分布式数据库的多级一致性|TDSQL 关键技术突破

    近年来,凭借高可扩展.高可用等技术特性,分布式数据库正在成为金融行业数字化转型的重要支撑.分布式数据库如何在不同的金融级应用场景下,在确保数据一致性的前提下,同时保障系统的高性能和高可扩展性,是分布式 ...