-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path994_javascript.js
More file actions
92 lines (77 loc) · 2.26 KB
/
994_javascript.js
File metadata and controls
92 lines (77 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// 在给定的网格中,每个单元格可以有以下三个值之一:
// 值 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 列)永远不会腐烂,因为腐烂只会发生在 4 个正向上。
// 示例 3:
// 输入:[[0,2]]
// 输出:0
// 解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0 。
//
// 提示:
// 1 <= grid.length <= 10
// 1 <= grid[0].length <= 10
// grid[i][j] 仅为 0、1 或 2
/**
* @param {number[][]} grid
* @return {number}
*/
// BFS
var orangesRotting = function(grid) {
let tempArray = [];
let fresh = 0
for(let i=0; i<grid.length; i++){
for(let j=0;j<grid[0].length; j++){
if(grid[i][j] == 2){
tempArray.push([grid[i][j], i, j])
}
if(grid[i][j] == 1){
fresh ++
}
}
}
if(fresh == 0) return 0;
let count = 0;
while(tempArray.length){
let length = tempArray.length;
while(length --){
let temp = tempArray.shift();
let i = temp[1];
let j = temp[2];
if(i+1 < grid.length && grid[i +1][j] == 1){
tempArray.push([grid[i +1][j], i+1, j]);
grid[i +1][j]++
fresh --
}
if(i-1 >= 0 && grid[i -1][j] == 1){
tempArray.push([grid[i -1][j], i-1, j])
grid[i -1][j]++
fresh --
}
if(j+1 < grid[0].length && grid[i][j+1] == 1){
tempArray.push([grid[i][j+1], i, j +1])
grid[i][j+1] ++
fresh --
}
if(j-1 >=0 && grid[i][j-1] == 1){
tempArray.push([grid[i][j-1], i, j -1])
grid[i][j-1] ++
fresh --
}
}
count ++
if(fresh == 0 ){
return count
}
}
return -1;
};