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.lengthn == mat[i].length1 <= m, n <= 1041 <= m * n <= 104-
mat[i][j]is either0or1. - There is at least one
0inmat.
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:
-
distancearray is initialized withPHP_INT_MAXfor all cells initially. - All
0cells are set to0in thedistancearray and added to the BFS queue.
-
-
Multi-Source BFS:
- Using a queue, we perform BFS from all
0cells 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
distancearray is updated with the minimum distances to the nearest0for 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)