[leetcode] 542. 01 Matrix (Medium)
给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右。
解法一:
利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离。
十分粗心的搞错了col和row,改了半天…………
Runtime: 132 ms, faster than 98.88% of C++ online submissions for 01 Matrix.
class Solution
{
public:
vector<vector<int>> updateMatrix(vector<vector<int>> &matrix)
{
if (matrix.size() == || matrix[].size() == )
return matrix; int n;
int m;
n = matrix.size();
m = matrix[].size();
int rangeNum = n + m;
vector<vector<int>> dis(n, vector<int>(m, )); for (int i = ; i < n; i++)
for (int j = ; j < m; j++)
{
if (matrix[i][j] == )
dis[i][j] = ;
else
{
int up = (i > ) ? dis[i - ][j] : rangeNum;
int left = (j > ) ? dis[i][j - ] : rangeNum;
dis[i][j] = min(left, up) + ;
}
} for (int i = n - ; i >= ; i--)
for (int j = m - ; j >= ; j--)
{
if (matrix[i][j] == )
dis[i][j] = ;
else
{
int right = (j + ) < m ? dis[i][j + ] : rangeNum;
int down = (i + ) < n ? dis[i + ][j] : rangeNum;
dis[i][j] = min(min(right, down) + , dis[i][j]);
}
}
return dis;
}
};
解法二:
BFS
class Solution
{
private:
bool isValid(int m, int n, int x, int y)
{
return x >= && y >= && x < m && y < n;
} int getShortestDistance(int m, int n, int x, int y, vector<vector<int>> &distance)
{
int result = distance[x][y]; if (isValid(m, n, x, y + ) && distance[x][y + ] != INT_MAX)
{
result = min(result, + distance[x][y + ]);
}
if (isValid(m, n, x, y - ) && distance[x][y - ] != INT_MAX)
{
result = min(result, + distance[x][y - ]);
}
if (isValid(m, n, x + , y) && distance[x + ][y] != INT_MAX)
{
result = min(result, + distance[x + ][y]);
}
if (isValid(m, n, x - , y) && distance[x - ][y] != INT_MAX)
{
result = min(result, + distance[x - ][y]);
}
return result;
} public:
vector<vector<int>> updateMatrix(vector<vector<int>> &matrix)
{
int m = matrix.size();
int n = matrix[].size();
vector<vector<int>> distance(m, vector<int>(n, INT_MAX));
queue<pair<int, int>> visit; for (int i = ; i < m; i++)
{
for (int j = ; j < n; j++)
{
if (matrix[i][j] == )
{
distance[i][j] = ;
visit.push(make_pair(i, j + ));
visit.push(make_pair(i, j - ));
visit.push(make_pair(i + , j));
visit.push(make_pair(i - , j));
}
}
} while (!visit.empty())
{
pair<int, int> cur = visit.front();
visit.pop();
int x = cur.first;
int y = cur.second; if (isValid(m, n, x, y))
{
int shortestD = getShortestDistance(m, n, x, y, distance);
if (shortestD < distance[x][y])
{
distance[x][y] = shortestD;
visit.push(make_pair(x, y + ));
visit.push(make_pair(x, y - ));
visit.push(make_pair(x + , y));
visit.push(make_pair(x - , y));
}
}
}
return distance;
}
};
[leetcode] 542. 01 Matrix (Medium)的更多相关文章
- leetcode 542. 01 Matrix 、663. Walls and Gates(lintcode) 、773. Sliding Puzzle 、803. Shortest Distance from All Buildings
542. 01 Matrix https://www.cnblogs.com/grandyang/p/6602288.html 将所有的1置为INT_MAX,然后用所有的0去更新原本位置为1的值. 最 ...
- LeetCode 542. 01 Matrix
输入:只包含0,1的矩阵 输出:元素1到达最近0的距离 算法思想:广度优先搜索. 元素为0为可达区域,元素为1为不可达区域,我们的目标是为了从可达区域不断地扩展至不可达区域,在扩展的过程中,也就计算出 ...
- 【LeetCode】01 Matrix 解题报告
[LeetCode]01 Matrix 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/01-matrix/#/descripti ...
- [Leetcode Week10]01 Matrix
01 Matrix 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/01-matrix/description/ Description Given a ...
- Java实现 LeetCode 542 01 矩阵(暴力大法,正反便利)
542. 01 矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 ...
- [array] leetcode - 54. Spiral Matrix - Medium
leetcode-54. Spiral Matrix - Medium descrition GGiven a matrix of m x n elements (m rows, n columns) ...
- Leetcode 542.01矩阵
01矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 ...
- 542 01 Matrix 01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离.两个相邻元素间的距离为 1 .示例 1:输入:0 0 00 1 00 0 0输出:0 0 00 1 00 0 0 示例 2:输入: ...
- 542. 01 Matrix
class Solution { public: vector<vector<int>> res; int m, n; vector<vector<int>& ...
随机推荐
- qt---cdb(Microsoft Console Debugger)调试
支持的调试器 windows系统下主要的调试器: CDB ,只能调试用户程序,只有控制台界面,以命令行形式工作 NTSD, 只能调试用户程序,只有控制台界面,以命令行形式工作 KD,主要用于内核调试, ...
- 源码解读·RT-Thread多任务调度算法
*本文依据RT-Thread当时最新版本4.0.1版本源码 RT-Thread操作系统是一款基于优先级和时间片轮转的多任务实时操作系统.其调度算法采用256个优先级,并支持相同优先级的任务存在.不同优 ...
- webpack 编译ES6
虽然js的es6是大势之趋,但很多浏览器还没有完全支持ES6语法,webpack可以进行对es6打包编译 需要安装的包有 npm init // 初始化 npm install babel-loade ...
- Django之分页器组件
class Pagination(object): def __init__(self,current_page,all_count,per_page_num=2,pager_count=11): & ...
- spring boot 2.x 系列 —— spring boot 整合 redis
文章目录 一.说明 1.1 项目结构 1.2 项目主要依赖 二.整合 Redis 2.1 在application.yml 中配置redis数据源 2.2 封装redis基本操作 2.3 redisT ...
- spring boot 2.x 系列 —— spring boot 整合 RabbitMQ
文章目录 一. 项目结构说明 二.关键依赖 三.公共模块(rabbitmq-common) 四.服务消费者(rabbitmq-consumer) 4.1 消息消费者配置 4.2 使用注解@Rabbit ...
- 微服务之服务注册与发现--Consul(转载)
http://blog.csdn.net/buxiaoxia/article/details/69788114 https://www.cnblogs.com/xiaohanlin/p/8016803 ...
- GRPC与.net core
系列章节 GRPC与.net core GRPC截止时间与元数据 GRPC与netcore Identity GRPC与netcore IdentityServer4 概述 GRPC的数据交互模式有: ...
- 分析了16年的福利彩票记录,原来可以用Python这么买彩票
目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 上周被一则新闻震惊到了,<2454万元大奖无人认领!福彩史上第二大弃奖在广东中山产生 >,在2019年5月2日开奖 ...
- 跟我学SpringCloud | 第十篇:服务网关Zuul高级篇
SpringCloud系列教程 | 第十篇:服务网关Zuul高级篇 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程全 ...