[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>& ...
随机推荐
- MinGW版Qt如何搭建lua环境?(详细步骤)
操作系统是windows,lua是Lua for Windows 5.1.4包含了这三个头文件 <ignore_js_op> 在.pro里加了includepath: <ignor ...
- Delphi获得一个进程的主窗体(GetWindow(AHandle, GW_OWNER)等于0的窗体才是主窗体,并且要IsWindowVisible排除Application窗口)
type TMainWindow = packed record ProcessID: THandle; MainWindow: THandle; end; PMainWindow ...
- Delphi中 TStringList 的详细用法 good
TStringList 类是在Delphi使用最厂的一个对像,我们这里一起来看看 TStringList 的详细用法. 先把要讨论的几个属性列出来:1.CommaText2.Delimiter &am ...
- 使用Func<T1, T2, TResult> 委托返回匿名对象
Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func< ...
- Laravel:php artisan key:generate三种报错解决方案,修改默认PHP版本(宝塔面板)
为了兼容N多个网站,服务器上有3个PHP版本5.3/5.6/7.2.宝塔默认为5.3,但是laravel5.7并不支持,所以在创建线上 .env 环境配置文件,初始化应用配置时候报错了. cp .en ...
- MySQL批量更新一个字段的值为随机数
$arr = []; $str = ''; for ($i=0; $i < 2660; ++$i) { $str .= " WHEN ".$i." THEN &qu ...
- surging 微服务引擎 2.0 会有多少惊喜?
surging 微服务引擎从2017年6月至今已经有两年的时间,这两年时间有多家公司使用surging 服务引擎,并且有公司搭建了CI/CD,并且使用了k8s 集群,这里我可以说下几家公司的服务搭建情 ...
- Django ORM基础篇【转载】
ORM( Object relational mapping 对象关系映射)D:把面向对象中的类和数据库表一一对应起来,在django项目与数据库之间起着桥梁的 ...
- Spring 入门程序
1.0 导包的时候要注意: 以上的第一个是.class文件 以上的第二个是文件的解释性页面. 以上的第三个是.java文件 2.0 配置文件需要导入依赖(有dtd 依赖,也有xsd依赖) ² 从be ...
- python数据库-MySQL数据库的增删改查基本操作(49)
一.数据库基础 表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式 行:行用于记录数据 记录:行内的数据 列:列用于规定数据格式 字段:数据的某个列 主键:唯一地标识表中的 ...