力扣(LeetCode)- 542. 01 矩阵

题目:

给定一个由 01 组成的矩阵 mat ,请输出一个 mat 矩阵中每一个格子对应位置元素到最近的 0 的距离的新矩阵。

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

示例 1:

|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |

复制代码
复制代码
输入:mat = [[0,0,0],[0,1,0],[1,1,1]]
输出:[[0,0,0],[0,1,0],[1,2,1]]

解答:javascript

主要思路就是,新建一个相同的数组 res,先将 0 位置填入,然后遍历所有 0 ,它位置的上下左右设为1,然后遍历所有 1 ,它位置的上下左右设为2,依次类推

javascript 复制代码
var updateMatrix = function(mat) {
    const res = []
    const visited = []
    for (let i = 0;i < mat.length;i++) {
      const r = []
      const v = []
      for (let j = 0;j < mat[0].length;j++) {
        if (mat[i][j]) {
          r.push(null)
          v.push(0)
        } else {
          r.push(0)
          v.push(1)
        }
      }
      res.push(r)
      visited.push(v)
    }
    dp(0, res, visited)
    return res
};

const dp = (n, res, visited) => {
  for (let i = 0;i < res.length;i++) {
    for (let j = 0;j < res[0].length;j++) {
      if (res[i][j] === n-1) {
        add(i, j, res, visited, n)
      }
    }
  }
  if (check(res)) {
    return
  }
  dp(n + 1, res, visited)
}

// 最近的元素距离0位置加1
const add = (i, j, res, visited, n) => {
  // left
  if (j - 1 >= 0) {
    set(i, j-1, res, visited, n)
  }
  // right
  if (j + 1 <= res[0].length - 1) {
    set(i, j+1, res, visited, n)
  }
  // up
  if (i - 1 >= 0) {
    set(i-1, j, res, visited, n)
  }
  // down
  if (i + 1 <= res.length - 1) {
    set(i+1, j, res, visited, n)
  }
}

const set = (i, j, res, visited, n) => {
  if (!visited[i][j]) {
    res[i][j] = n
    visited[i][j] = 1
  }
}

const check = (res) => {
  let flag = true
  
  for (let i = 0;i < res.length;i++) {
    for (let j = 0;j < res[0].length;j++) {
      if (res[i][j] === null) {
        flag = false
      }
    }
  }
  return flag
}
相关推荐
疯狂打码的少年1 分钟前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
HiDev_12 分钟前
【非标自动化】plc执行顺序问题、扫描周期问题
深度学习·算法·机器学习
高洁0141 分钟前
工信部教考中心证书-人工智能系列本系列
人工智能·python·深度学习·算法
陈王卜1 小时前
Reduce 算子优化笔记
算法
wabs6661 小时前
关于图论【最短路径之Bellman_ford 算法(判断负权回路)|卡码网95.城市间货物运输II的思考】
数据结构·算法·图论·bellman_ford算法·卡码网·判断负权回路
YouonlyliveonceC1 小时前
《大话数据结构》第4章实战:中缀表达式转后缀 + 后缀表达式求值(完整可运行实现)
算法
phoenix@Capricornus1 小时前
从统计决策到贝叶斯估计
人工智能·算法·机器学习
AICDragon2 小时前
1.8%就够了:K3的896个MoE专家,为什么激活率这么低反而是好事?
人工智能·算法
VALENIAN瓦伦尼安教学设备2 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法
货拉拉技术2 小时前
重塑 Agent 度量衡:基于 LLM-as-a-Judge 的离线评估体系与实践
算法·设计模式