zoukankan      html  css  js  c++  java
  • 刷题75——矩阵

    114.矩阵

     题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/01-matrix

    题目描述

    给定一个由 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
    注意:

    给定矩阵的元素个数不超过 10000。
    给定矩阵中至少有一个元素是 0。
    矩阵中的元素只在四个方向上相邻: 上、下、左、右。

    重难点

    1. 如果此元素为0,那么距离为0;
    2. 查找放向可以从左、上、右、下进行遍历查找。

    题目分析

    1. 定义和矩阵大小一致的二维数组dp,并赋初值Infinity:表示正无穷大的数值;
    2. 从矩阵左上角开始查找“0”,可以查找的方向为:右、下,当前元素若为0,那么距离为0,即dp为0;
    3. 从矩阵右下角开始查找“0”,可以查找的方向为:左、上。
    4. 返回dp。
    /**
     * @param {number[][]} matrix
     * @return {number[][]}
     */
    var updateMatrix = function(matrix) {
        let m = matrix.length;
        let n = matrix[0].length;
        let dp = new Array(m).fill(Infinity).map(() => new Array(n).fill(Infinity));
        //右下移动
        for(let i=0; i<m; i++){
            for(let j=0; j<n; j++){
                if(matrix[i][j] == 0) dp[i][j] = 0;
                else{
                    if(i > 0) dp[i][j] = Math.min(dp[i-1][j]+1 , dp[i][j]);
                    if(j > 0) dp[i][j] = Math.min(dp[i][j-1]+1 , dp[i][j]);
                }
            }
        }
        //左上移动
        for(let i=m-1; i>=0; i--){
            for(let j=n-1; j>=0; j--){
                if(i < m-1) dp[i][j] = Math.min(dp[i+1][j]+1 , dp[i][j]);
                if(j < n-1) dp[i][j] = Math.min(dp[i][j+1]+1 , dp[i][j]);   
            }
        }
        return dp;
    };
    

      

  • 相关阅读:
    服务器负载均衡的基本功能和实现原理
    二分查找
    TCP的运输连接管理
    linux常用命令
    XX公司在线笔试题编程题之一
    java对象转json格式
    Java多线程并发技术
    进程同步与通信
    单例模式的C++实现
    rsyncd启动脚本
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12717242.html
Copyright © 2011-2022 走看看