542. 01 Matrix
Difficulty: Medium
Topics: Array
, Dynamic Programming
, Breadth-First Search
, Matrix
Given an m x n
binary matrix mat
, return the distance of the nearest 0
for each cell.
The distance between two cells sharing a common edge is 1
.
Example 1:
- Input: mat = [[0,0,0],[0,1,0],[0,0,0]]
- Output: [[0,0,0],[0,1,0],[0,0,0]]
Example 2:
- Input: mat = [[0,0,0],[0,1,0],[1,1,1]]
- Output: [[0,0,0],[0,1,0],[1,2,1]]
Constraints:
m == mat.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
-
mat[i][j]
is either0
or1
. - There is at least one
0
inmat
.
Note: This question is the same as 1765. Map of Highest Peak
Solution:
We will use multi-source Breadth-First Search (BFS), where all the 0
cells are treated as starting points (sources). For every 1
cell, we calculate the minimum distance to the nearest 0
.
Let's implement this solution in PHP: 542. 01 Matrix
<?php
/**
* @param Integer[][] $mat
* @return Integer[][]
*/
function updateMatrix($mat) {
...
...
...
/**
* go to ./solution.php
*/
}
// Example usage:
$mat1 = [[0,0,0],[0,1,0],[0,0,0]];
$mat2 = [[0,0,0],[0,1,0],[1,1,1]];
echo updateMatrix($mat1) . "\n"; // Output: [[0,0,0],[0,1,0],[0,0,0]]
echo updateMatrix($mat2) . "\n"; // Output: [[0,0,0],[0,1,0],[1,2,1]]
?>
Explanation:
-
Initialization:
-
distance
array is initialized withPHP_INT_MAX
for all cells initially. - All
0
cells are set to0
in thedistance
array and added to the BFS queue.
-
-
Multi-Source BFS:
- Using a queue, we perform BFS from all
0
cells simultaneously. - For each cell in the queue, check its neighbors (up, down, left, right).
- If the neighbor's distance can be reduced (
distance[newRow][newCol] > currentDistance + 1
), update its distance and enqueue it.
- Using a queue, we perform BFS from all
-
Output:
- The
distance
array is updated with the minimum distances to the nearest0
for all cells.
- The
Input and Output:
Input 1:
$mat1 = [
[0, 0, 0],
[0, 1, 0],
[0, 0, 0]
];
Output 1:
Array
(
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 1
[2] => 0
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
)
Input 2:
$mat2 = [
[0, 0, 0],
[0, 1, 0],
[1, 1, 1]
];
Output 2:
Array
(
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 1
[2] => 0
)
[2] => Array
(
[0] => 1
[1] => 2
[2] => 1
)
)
This solution is efficient with a time complexity of O(m × n), as each cell is processed once. The space complexity is also O(m × n) due to the distance
array and the BFS queue.
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me:
Top comments (0)