LeetCode 每日刷题 542. 01 Matrix

题目链接 542. 01 Matrix
难度:Medium

就是求01矩阵中所有点与周围值为0的点最近的曼哈顿距离是多少。
做法有很多,记得以前有次省赛网络赛的题和这个一样,可以暴力点,把所有1都加到队列里面,然后就是一个bfs。
我这次是前后两次dp求的。代码如下:

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        const int Max=10000;
        int m=matrix.size();
        int n=matrix[0].size();
        vector<vector<int> >dp(m,vector<int>(n,Max));//m行n列Max
        for(int i=0;i<m;++i){
            for(int j=0;j<n;++j){
                if(!matrix[i][j]) dp[i][j]=0;
                else{
                    dp[i][j]=min(i==0?Max:dp[i-1][j]+1,j==0?Max:dp[i][j-1]+1);
                }
            }
        }
        for(int i=m-1;i>=0;--i){
            for(int j=n-1;j>=0;--j){
                if(!matrix[i][j]) continue;
                dp[i][j]=min(dp[i][j],min(i==m-1?Max:dp[i+1][j]+1,j==n-1?Max:dp[i][j+1]+1));
            }
        }
        return dp;
    }
};

Runtime: 176 ms, faster than 98.13% of C++ online submissions for 01 Matrix.
Memory Usage: 20.9 MB, less than 90.13% of C++ online submissions for 01 Matrix. Next challenges:

你可能感兴趣的:(DP,LeetCode,动态规划,LeetCode每日刷题)