zoukankan      html  css  js  c++  java
  • 542. 01 矩阵

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

    两个相邻元素间的距离为 1 。

    示例 1:
    输入:

    0 0 0
    0 1 0
    0 0 0
    

    输出:

    0 0 0
    0 1 0
    0 0 0
    

    示例 2:
    输入:

    0 0 0
    0 1 0
    1 1 1
    

    输出:

    0 0 0
    0 1 0
    1 2 1
    

    注意:

    1. 给定矩阵的元素个数不超过 10000。
    2. 给定矩阵中至少有一个元素是 0。
    3. 矩阵中的元素只在四个方向上相邻: 上、下、左、右。
    /*动态规划从左上角到右下角一遍,从右下角到左上角一遍,那么(i,j)处的元素一定是上下左右中最小的元素+1*/ 
    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,10010)); for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(matrix[i][j]==0)dp[i][j]=0; } for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(i>0) dp[i][j]=min(dp[i][j],dp[i-1][j]+1); if(j>0) dp[i][j]=min(dp[i][j],dp[i][j-1]+1); } for(int i=m-1;i>=0;i--) for(int j=n-1;j>=0;j--){ if(i<m-1) dp[i][j]=min(dp[i][j],dp[i+1][j]+1); if(j<n-1) dp[i][j]=min(dp[i][j],dp[i][j+1]+1); } return dp; }
  • 相关阅读:
    倍数求和
    最大(小)值
    数组扁平化:(多维数组 -> 一维数组)
    任意数求和
    找到重复最多项
    Linux 标准 I/O 库
    Linux文件操作函数
    Linux文件的IO操作 一
    Linux文件系统概述二
    Linux文件系统概述
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/12704321.html
Copyright © 2011-2022 走看看