leetcode 994.腐烂的橘子

题目:

在给定的网格中,每个单元格可以有以下三个值之一:

  • 值 0 代表空单元格;
  • 值 1 代表新鲜橘子;
  • 值 2 代表腐烂的橘子。

每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。

返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1

分析:

最近在看广度优先搜素的题目,这个是比较简单基础的题了。

腐烂的橘子会把靠近他的新鲜的橘子腐蚀,那么就是只要从所有坏的橘子的地方一层一层往外遍历就可以了。

代码:

 1 //5ms 97%
 2 class Solution {
 3     public int orangesRotting(int[][] grid) {
 4         Queue<int[]> q=new LinkedList<>();
 5         int h=grid.length,w=grid[0].length,time=0;
 6         for(int n=0;n<h;++n)
 7             for(int m=0;m<w;++m)
 8                 if(grid[n][m]==2) {
 9                     int[] po= {0,n,m};
10                     q.add(po);
11                 }
12         while(!q.isEmpty()) {
13             int[] g=q.poll();
14             time=time>g[0]?time:g[0];
15             if(g[1]+1<h&&grid[g[1]+1][g[2]]==1) {
16                 grid[g[1]+1][g[2]]=2;
17                 int[] po= {g[0]+1,g[1]+1,g[2]};
18                 q.add(po);
19             }
20             if(g[1]-1>=0&&grid[g[1]-1][g[2]]==1) {
21                 grid[g[1]-1][g[2]]=2;
22                 int[] po= {g[0]+1,g[1]-1,g[2]};
23                 q.add(po);
24             }
25             if(g[2]-1>=0&&grid[g[1]][g[2]-1]==1) {
26                 grid[g[1]][g[2]-1]=2;
27                 int[] po= {g[0]+1,g[1],g[2]-1};
28                 q.add(po);
29             }
30             if(g[2]+1<w&&grid[g[1]][g[2]+1]==1) {
31                 grid[g[1]][g[2]+1]=2;
32                 int[] po= {g[0]+1,g[1],g[2]+1};
33                 q.add(po);
34             }
35         }
36         for(int n=0;n<h;++n)
37             for(int m=0;m<w;++m)
38                 if(grid[n][m]==1)
39                     return -1;
40         return time;
41     }
42 }

原文地址:https://www.cnblogs.com/CHAHA123/p/10736353.html

时间: 2024-08-30 15:04:25

leetcode 994.腐烂的橘子的相关文章

LeetCode——994. 腐烂的橘子

994. 腐烂的橘子 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数.如果不可能,返回 -1. 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1]] 输出:4 示例 2: 输入:[[2,1,1],[0,1,1],[1,0,1]] 输出:-1 解释:左下角的橘子(第 2 行, 第

leetcode.994腐烂的橘子

在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格:值 1 代表新鲜橘子:值 2 代表腐烂的橘子.每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数.如果不可能,返回 -1. 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1]]输出:4示例 2: 输入:[[2,1,1],[0,1,1],[1,0,1]]输出:-1解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发

leetcode 994. 腐烂的橘子(Rotting Oranges)

目录 题目描述: 示例 1: 示例 2: 示例 3: 解法: 题目描述: 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数.如果不可能,返回 -1. 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1]] 输出:4 示例 2: 输入:[[2,1,1],[0,1,1],[1,0,1]]

Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)

BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree Level Order Traversal) 在给定的网格中,每个单元格可以有以下三个值之一: 值 0 代表空单元格: 值 1 代表新鲜橘子: 值 2 代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数.如果不可能,返回 -1. 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1

【LeetCode】994. 腐烂的橘子(BFS)

在给定的网格中,每个单元格可以有以下三个值之一: 值?0?代表空单元格: 值?1?代表新鲜橘子: 值?2?代表腐烂的橘子. 每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂. 返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数.如果不可能,返回?-1. 示例 1: 输入:[[2,1,1],[1,1,0],[0,1,1]] 输出:4 示例 2: 输入:[[2,1,1],[0,1,1],[1,0,1]] 输出:-1 解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,

LeetCode 994. Rotting Oranges

原题链接在这里:https://leetcode.com/problems/rotting-oranges/ 题目: In a given grid, each cell can have one of three values: the value 0 representing an empty cell; the value 1 representing a fresh orange; the value 2 representing a rotten orange. Every minut

Leetcode-994 Rotting Oranges(腐烂的橘子)

1 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 2 class Solution 3 { 4 public: 5 int orangesRotting(vector<vector<int>>& grid) 6 { 7 int left = 0; 8 int sz1 = grid.size(); 9 int sz2 = grid[0].size(); 10 _for(i,0,sz1) 11 _for(j,0,sz2

LeetCode每日一题

994. 腐烂的橘子 解法一:DFS 1 int dx[4]={-1,0,1,0}; 2 int dy[4]={0,-1,0,1}; 3 class Solution { 4 public: 5 //这里需要对普通的DFS进行一定的处理,即DFS进化版本... 6 void dfs(vector<vector<int>>& grid,int i,int j,int res){ 7 if(i<0||j<0||i>=grid.size()||j>=gri

leet

# 题名1 两数之和    2 两数相加    3 无重复字符的最长子串    4 寻找两个有序数组的中位数    5 最长回文子串    6 Z 字形变换    7 整数反转    8 字符串转换整数 (atoi)    9 回文数    10 正则表达式匹配    11 盛最多水的容器    12 整数转罗马数字    13 罗马数字转整数    14 最长公共前缀    15 三数之和    16 最接近的三数之和    17 电话号码的字母组合    18 四数之和    19 删除链表