博客
关于我
LeetCode 评论区:你管这难度叫简单???
阅读量:695 次
发布时间:2019-03-16

本文共 2294 字,大约阅读时间需要 7 分钟。

解决方案

要解决这个问题,我们需要模拟橘子腐烂传播的过程。使用广度优先搜索(BFS)来逐层扩散腐烂,直到所有新鲜橘子都被腐蚀。每次处理一个腐烂橘子,会检查其四个邻居,将新鲜邻居腐化并加入队列。

方法思路

  • 初始化:遍历网格,记录初始的腐烂橘子位置,并将它们加入队列。统计新鲜橘子的数量count。
  • BFS处理:每分钟处理队列中的所有腐烂橘子。对于每个腐烂橘子,检查其上下左右的邻居。
  • 腐化邻居:如果邻居是新鲜橘子,将其腐化,加入队列,并减少count。
  • 终止条件:如果在BFS结束后,仍有新鲜橘子存在,返回-1。否则,返回处理所需的分钟数。
  • 解决代码

    import java.util.Deque;
    import java.util.ArrayDeque;
    public class orangesRotting02 {
    public static int orangesRotting(int[][] grid) {
    int rows = grid.length;
    int cols = grid[0].length;
    Deque
    queue = new ArrayDeque<>();
    int count = 0;
    // 初始化队列,记录初始腐烂点,并统计新鲜点数
    for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
    if (grid[i][j] == 2) {
    queue.add(new int[]{i, j});
    } else if (grid[i][j] == 1) {
    count++;
    }
    }
    }
    int res = 0;
    while (!queue.isEmpty() && count > 0) {
    res++;
    int size = queue.size();
    for (int i = 0; i < size; i++) {
    int[] temp = queue.poll();
    int r = temp[0], c = temp[1];
    // 上
    if (r > 0 && grid[r - 1][c] == 1) {
    grid[r - 1][c] = 2;
    count--;
    queue.add(new int[]{r - 1, c});
    }
    // 下
    if (r < rows - 1 && grid[r + 1][c] == 1) {
    grid[r + 1][c] = 2;
    count--;
    queue.add(new int[]{r + 1, c});
    }
    // 左
    if (c > 0 && grid[r][c - 1] == 1) {
    grid[r][c - 1] = 2;
    count--;
    queue.add(new int[]{r, c - 1});
    }
    // 右
    if (c < cols - 1 && grid[r][c + 1] == 1) {
    grid[r][c + 1] = 2;
    count--;
    queue.add(new int[]{r, c + 1});
    }
    }
    }
    return count == 0 ? res : -1;
    }
    }

    代码解释

  • 初始化部分:遍历网格,记录初始腐烂点,并将它们加入队列。同时统计新鲜橘子的数量count。
  • BFS处理:每次从队列中取出一个橘子,检查其四个邻居。对于每个有效邻居,检查是否是新鲜橘子,将其腐化,并加入队列,同时减少count。
  • 返回结果:当队列为空时,若count为0,返回处理分钟数res;否则,返回-1。
  • 这个方法通过BFS高效地处理了每个橘子的腐蚀过程,确保在最少的分钟内完成任务。如果无法完成任务,如示例中的某些情况,会返回-1。

    转载地址:http://idhqz.baihongyu.com/

    你可能感兴趣的文章
    Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
    查看>>
    node.js 配置首页打开页面
    查看>>
    node.js+react写的一个登录注册 demo测试
    查看>>
    Node.js中环境变量process.env详解
    查看>>
    Node.js之async_hooks
    查看>>
    Node.js初体验
    查看>>
    Node.js升级工具n
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js卸载超详细步骤(附图文讲解)
    查看>>
    Node.js基于Express框架搭建一个简单的注册登录Web功能
    查看>>
    node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》
    查看>>
    Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
    查看>>
    Node.js安装及环境配置之Windows篇
    查看>>
    Node.js安装和入门 - 2行代码让你能够启动一个Server
    查看>>
    node.js安装方法
    查看>>
    Node.js官网无法正常访问时安装NodeJS的方法
    查看>>
    node.js模块、包
    查看>>
    node.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>