[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>& ...
随机推荐
- QML Settings 小的示例
QML 中使用 Settings 可以保存一些简单的信息,例如用户名,密码,窗口位置,大小等,没有Sqlite那么麻烦,简单易用哦~~~(环境:Qt5.8 for android ,Windows ...
- Rainyday.js – Rendering Raindrops with JavaScript
Posted · Category:GPL License,Tools 直击现场 The idea behind Rainyday.js is to create a JavaScript libra ...
- Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)
type TMainWindow = packed record ProcessID: THandle; MainWindow: THandle; end; PMainWindow ...
- C# Task 的用法
C# Task 的用法(转自:http://www.wxzzz.com/683.html#) 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来 ...
- 有效地查找SAP增强点
找SAP增强点一直都是SAP开发的重点难点,增强开发的代码一般不会很多,但是需要花费比较多的时间在查找增强点上 网上也流传了很多查找SAP增强的方法: 1.利用TCODE寻找增强 2.利用系统函数寻找 ...
- hive Metastore contains multiple versions
凌晨接到hive作业异常,hive版本为1.2.1,hadoop版本apache 2.7.1,元数据存储在mysql中,异常信息如下: Logging initialized using config ...
- python字典的内建函数
In [70]: test=dict(x=1,y=2,z=3) In [71]: test Out[71]: {'x': 1, 'y': 2, 'z': 3} In [72]: a=['a','b', ...
- 《Spring Cloud》学习(三) 容错保护!
在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身间题出现调用故障或延迟,而 ...
- JVM 参数类型
标准参数 -help -server -client -version -showversion -cp -classpath X参数 非标准化参数(在各个JDK版本中可能会变,但是变动比较小) -X ...
- java里字节与字符的区别
当时学Java的时候没搞懂字节和字符的区别,今天看文件输入输出流的时候觉得是时候彻底把这两个概念弄懂. 首先得知道byte的概念和作用: byte即字节的意思,是java中的基本数据类型,用来申明字节 ...