542. 01 Matrix
Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
The distance between two adjacent cells is 1. Example 1:
Input:
0 0 0 0 1 0 0 0 0Output:
0 0 0 0 1 0 0 0 0
Example 2:
Input:
0 0 0 0 1 0 1 1 1Output:
0 0 0 0 1 0 1 2 1
Note:
- The number of elements of the given matrix will not exceed 10,000.
- There are at least one 0 in the given matrix.
- The cells are adjacent in only four directions: up, down, left and right.
题意:
对于二维数组中的每一个元素,找距离自己最近的0(上、下、左、右四个方向)
代码:
class Solution {
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
vector<vector<int>> dp(m,vector<int>(n,INT_MAX-10000));
int i, j;
for(i=0;i<m;i++)//从左边和上边两个方向找
for(j=0;j<n;j++){
if(!matrix[i][j]){
dp[i][j]=0;
}
else{
if(i)
dp[i][j]=min(dp[i-1][j]+1,dp[i][j]);
if(j)
dp[i][j]=min(dp[i][j-1]+1,dp[i][j]);
}
}
for(i=m-1;i>=0;i--)//从右边和下边两个方向找
for(j=n-1;j>=0;j--){
if(!matrix[i][j]){
dp[i][j]=0;
}
else{
if(i<m-1)
dp[i][j]=min(dp[i+1][j]+1,dp[i][j]);
if(j<n-1)
dp[i][j]=min(dp[i][j+1]+1,dp[i][j]);
}
}
return dp;
}
};