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(" ...
随机推荐
- 齐博X1数据表之系统参数
https://v.youku.com/v_show/id_XMzg0MTEzMzEyOA== 不会插入视频 直接发 优酷地址吧= =!
- 微信小程序之顶部导航栏
wxml: <!--导航条--><view class="navbar"> <text wx:for="{{navbar}}" d ...
- python字符串的一些操作
# 1.变量的多次赋值 print('1.变量的多次赋值') name = '小明' # 没有意义的 name = '小刚' # 对前面创建的变量名称进行覆盖 # 删除原来的数据,写入新的数据 pri ...
- jQuery+bootstrap实现有省略号的数据分页
1.前言 在前端通过ajax请求数据后,可以通过bootstrap实现分页.由于bootstrap只提供分页的按钮的样式.数据分页我们需要实现页码跳转,上一页下一页,数据过多显示省略号,点击省略号能快 ...
- 聊聊GPU与CPU的区别
目录 前言 CPU是什么? GPU是什么? GPU与CPU的区别 GPU的由来 并行计算 GPU架构优化 GPU和CPU的应用场景 作者:小牛呼噜噜 | https://xiaoniuhululu.c ...
- 关于入门深度学习mnist数据集前向计算的记录
import osimport lr as lrimport tensorflow as tffrom pyspark.sql.functions import stddevfrom tensorfl ...
- 小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像)
小程序利用canvas 绘制图案 (生成海报, 生成有特色的头像) 微信小程序生成特色头像,海报等是比较常见的.下面我来介绍下实现该类小程序的过程. 首先选择前端来通过 canvas 绘制.这样比较节 ...
- Hutool 的学习
1. Hutool 介绍 Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜 ...
- typora实现多平台发布文章
源码下载 前言 之前写过一片文章,typora 使用CSDN作为图床,用来存储 markdown 文章的图片资源文件.后来发现 typora 还可以自定义导出命令,那么也可以利用这个功能实现直接发布到 ...
- error while loading shared libraries: libSM.so.6: cannot open shared object file: No such file or di
前言 运行 ida软件报错, 但是我的系统中存在 libSM.so.6 解决办法 首先查看系统中的 libsm.so.6 ldconfig -p |grep -i libsm.so.6 输出: lib ...