dfs 返回值用bool相对void会快一点
力扣 剑指 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会快一点的更多相关文章
- C# 调用 C++ 的 DLL 返回值为 bool 时,值混乱
现象:C++ 导出函数的返回值为 false,C# 调用该函数获取的返回值却为 true . 原因:C++ 导出函数返回 false 时,采取的方式是: 将 C# 定义的用来接收返回值的 bool 所 ...
- malloc 返回值的类型是 void *
malloc 返回值的类型是 void *,所以在调用 malloc 时要显式地进行类型转换,将 void * 转换成所需要的指针类型. #include <iostream> using ...
- jQuery find() 搜索所有段落中的后代 C# find() 第一个匹配元素 Func 有返回值 Action是没有返回值 Predicate 只有一个参数且返回值为bool 表达式树Expression
所有p后代span Id为 TotalProject 的 select 标签 的后代 option标签 为选中的 text using System; using System.Collections ...
- std::vector<bool> 在 auto 推断下的返回值是 bool & 引用
转自: https://www.cnblogs.com/hustxujinkang/p/5218148.html //////////// std::vector<bool> featur ...
- void in javascript是一个指定要计算表达式但不返回值的运算符
void in javascript是一个指定要计算表达式但不返回值的运算符.void运算符使用格式如下:1.javascript:void(表达式)2.javascript:void表达式表达式是要 ...
- 关于"cin>>"输入成功或失败时的“返回值”(转载)
今天在看c++primer的时候,读到其中这样一段话: When we use an istream as a condition, the effect is to test the state o ...
- iOS用三种途径实现一方法有多个返回值
以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...
- 学习笔记_springmvc返回值、数据写到页面、表单提交、ajax、重定向
数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView("index", map ...
- 慕课网-Java入门第一季-7-2 Java 中无参无返回值方法的使用
来源:http://www.imooc.com/code/1578 如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法. 方法的使用分两步: 第一步,定义方法 例如:下面代码定义了一个方法名 ...
- springmvc返回值、数据写到页面、表单提交、ajax、重定向
实验是在前一篇文章的项目上做的: 数据写到页面 后台往前台传数据 TestController添加 /** * 方法的返回值采用ModelAndView, new ModelAndView(" ...
随机推荐
- CentOS7虚拟机配置git仓库(配置虚拟机,网络,git仓库,windows端git访问)
想要达成的目的:从windows使用git访问CentOS7服务器上搭建的git仓库 用到的软件: (1)VMware-workstation-full-15.5.0-14665864.exe (2) ...
- ES6 学习笔记(九)Set的基本用法
1 基本用法 set类似于数组,它的成员是唯一的,当有多个相同的值,只会保留一份. 1.1 创建方法 Set本身是一个构造函数,用来生成Set实例,如: const s = new Set() let ...
- CF815D
模拟赛遇到的题目. 看各位大佬的做法都不是很懂,于是自己一通乱搞搞出来了. 题意 翻译清楚的不能再清楚了 做法 为了方便叙述,我们将每个给出的三元组表示成 \((a_i,b_i,c_i)\),所选的三 ...
- WebKit策略:<foreignObject>可用于绘制svg中的html标签,但与<use>搭配不生效
在<svg>里面可以利用<foreignObject>绘制html标签,原本是我在iconfont采用Font class方式引入svg的无奈之举. 起初的设计是所有icon先 ...
- c语言内存四区、数据存储范围和内存存储方向
(1)代码区通常是共享只读(代码无法修改)的,即可以被其他的程序调用,例如运行两个qq,除了数据不一样,代码都是一样的, 每次运行qq,都会将代码和数据加载到内存中,除了数据,每次加载的代码都是一样的 ...
- 渗透测试中遇到的Adminer任意文件读取漏洞
渗透测试中遇到的Adminer任意文件读取漏洞 免责声明: 软件简介 漏洞原理 漏洞复现 字典脚本 直接输入文件读取脚本 直接输入文件绝对路径读取脚本使用方法 字典脚本使用方法 免责声明: 免责声明: ...
- 2022春每日一题:Day 22
题目:[HAOI2008]糖果传递 光看题几乎没有思路,但是显然到最后每个人手中一定有 d=s/n个糖果(s为所有人糖果总和),不妨设2号给1号x2个糖果,3号给2号x3个.....1号给n号x1个, ...
- Java-数组工具类Arrays
java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作. toSting方法 public static String toString(数组):将参 ...
- 【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」
日志追踪 日志追踪对于功能问题的排查和数据流转的路径分析时非常重要的,有了全链路日志追踪体系机制可以非常有效且快速的定位问题,但在多线程环境中,若没有相关成熟的框架的支持,想要实现日志追踪,就需要手动 ...
- ubuntu 20.04 / 22.04 运行32位程序
sudo dpkg --add-architecture i386 sudo apt install libc6:i386 libstdc++6:i386 sudo apt-get update su ...