Skip to content

Commit 9280ded

Browse files
committed
feat: add solutions to lc problem: No.0994
No.0994.Rotting Oranges
1 parent ce8dd05 commit 9280ded

File tree

4 files changed

+289
-0
lines changed

4 files changed

+289
-0
lines changed

Diff for: solution/0900-0999/0994.Rotting Oranges/README.md

+100
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,106 @@ func orangesRotting(grid [][]int) int {
216216
}
217217
```
218218

219+
### **TypeScript**
220+
221+
```ts
222+
function orangesRotting(grid: number[][]): number {
223+
const m = grid.length;
224+
const n = grid[0].length;
225+
let count = 0;
226+
const queue = [];
227+
for (let i = 0; i < m; i++) {
228+
for (let j = 0; j < n; j++) {
229+
if (grid[i][j] === 1) {
230+
count++;
231+
} else if (grid[i][j] === 2) {
232+
queue.push([i, j]);
233+
}
234+
}
235+
}
236+
let res = 0;
237+
const dris = [1, 0, -1, 0, 1];
238+
while (count !== 0 && queue.length !== 0) {
239+
for (let i = queue.length; i > 0; i--) {
240+
const [x, y] = queue.shift();
241+
for (let j = 0; j < 4; j++) {
242+
const newX = x + dris[j];
243+
const newY = y + dris[j + 1];
244+
if (
245+
newX >= 0 &&
246+
newX < m &&
247+
newY >= 0 &&
248+
newY <= n &&
249+
grid[newX][newY] === 1
250+
) {
251+
grid[newX][newY] = 2;
252+
queue.push([newX, newY]);
253+
count--;
254+
}
255+
}
256+
}
257+
res++;
258+
}
259+
if (count != 0) {
260+
return -1;
261+
}
262+
return res;
263+
}
264+
```
265+
266+
### **Rust**
267+
268+
```rust
269+
use std::collections::VecDeque;
270+
271+
impl Solution {
272+
pub fn oranges_rotting(mut grid: Vec<Vec<i32>>) -> i32 {
273+
let mut queue = VecDeque::new();
274+
let m = grid.len();
275+
let n = grid[0].len();
276+
// 新鲜橘子数量
277+
let mut count = 0;
278+
for i in 0..m {
279+
for j in 0..n {
280+
match grid[i][j] {
281+
1 => count += 1,
282+
2 => queue.push_back([i as i32, j as i32]),
283+
_ => (),
284+
}
285+
}
286+
}
287+
let mut res = 0;
288+
let dirs = [1, 0, -1, 0, 1];
289+
while count != 0 && queue.len() != 0 {
290+
let mut len = queue.len();
291+
while len != 0 {
292+
let [x, y] = queue.pop_front().unwrap();
293+
for i in 0..4 {
294+
let new_x = x + dirs[i];
295+
let new_y = y + dirs[i + 1];
296+
if new_x >= 0
297+
&& new_x < m as i32
298+
&& new_y >= 0
299+
&& new_y < n as i32
300+
&& grid[new_x as usize][new_y as usize] == 1
301+
{
302+
grid[new_x as usize][new_y as usize] = 2;
303+
queue.push_back([new_x, new_y]);
304+
count -= 1;
305+
}
306+
}
307+
len -= 1;
308+
}
309+
res += 1;
310+
}
311+
if count != 0 {
312+
return -1;
313+
}
314+
res
315+
}
316+
}
317+
```
318+
219319
### **...**
220320

221321
```

Diff for: solution/0900-0999/0994.Rotting Oranges/README_EN.md

+99
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,105 @@ func orangesRotting(grid [][]int) int {
206206
}
207207
```
208208

209+
### **TypeScript**
210+
211+
```ts
212+
function orangesRotting(grid: number[][]): number {
213+
const m = grid.length;
214+
const n = grid[0].length;
215+
let count = 0;
216+
const queue = [];
217+
for (let i = 0; i < m; i++) {
218+
for (let j = 0; j < n; j++) {
219+
if (grid[i][j] === 1) {
220+
count++;
221+
} else if (grid[i][j] === 2) {
222+
queue.push([i, j]);
223+
}
224+
}
225+
}
226+
let res = 0;
227+
const dris = [1, 0, -1, 0, 1];
228+
while (count !== 0 && queue.length !== 0) {
229+
for (let i = queue.length; i > 0; i--) {
230+
const [x, y] = queue.shift();
231+
for (let j = 0; j < 4; j++) {
232+
const newX = x + dris[j];
233+
const newY = y + dris[j + 1];
234+
if (
235+
newX >= 0 &&
236+
newX < m &&
237+
newY >= 0 &&
238+
newY <= n &&
239+
grid[newX][newY] === 1
240+
) {
241+
grid[newX][newY] = 2;
242+
queue.push([newX, newY]);
243+
count--;
244+
}
245+
}
246+
}
247+
res++;
248+
}
249+
if (count != 0) {
250+
return -1;
251+
}
252+
return res;
253+
}
254+
```
255+
256+
### **Rust**
257+
258+
```rust
259+
use std::collections::VecDeque;
260+
261+
impl Solution {
262+
pub fn oranges_rotting(mut grid: Vec<Vec<i32>>) -> i32 {
263+
let mut queue = VecDeque::new();
264+
let m = grid.len();
265+
let n = grid[0].len();
266+
let mut count = 0;
267+
for i in 0..m {
268+
for j in 0..n {
269+
match grid[i][j] {
270+
1 => count += 1,
271+
2 => queue.push_back([i as i32, j as i32]),
272+
_ => (),
273+
}
274+
}
275+
}
276+
let mut res = 0;
277+
let dirs = [1, 0, -1, 0, 1];
278+
while count != 0 && queue.len() != 0 {
279+
let mut len = queue.len();
280+
while len != 0 {
281+
let [x, y] = queue.pop_front().unwrap();
282+
for i in 0..4 {
283+
let new_x = x + dirs[i];
284+
let new_y = y + dirs[i + 1];
285+
if new_x >= 0
286+
&& new_x < m as i32
287+
&& new_y >= 0
288+
&& new_y < n as i32
289+
&& grid[new_x as usize][new_y as usize] == 1
290+
{
291+
grid[new_x as usize][new_y as usize] = 2;
292+
queue.push_back([new_x, new_y]);
293+
count -= 1;
294+
}
295+
}
296+
len -= 1;
297+
}
298+
res += 1;
299+
}
300+
if count != 0 {
301+
return -1;
302+
}
303+
res
304+
}
305+
}
306+
```
307+
209308
### **...**
210309

211310
```

Diff for: solution/0900-0999/0994.Rotting Oranges/Solution.rs

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
use std::collections::VecDeque;
2+
3+
impl Solution {
4+
pub fn oranges_rotting(mut grid: Vec<Vec<i32>>) -> i32 {
5+
let mut queue = VecDeque::new();
6+
let m = grid.len();
7+
let n = grid[0].len();
8+
// 新鲜橘子数量
9+
let mut count = 0;
10+
for i in 0..m {
11+
for j in 0..n {
12+
match grid[i][j] {
13+
1 => count += 1,
14+
2 => queue.push_back([i as i32, j as i32]),
15+
_ => (),
16+
}
17+
}
18+
}
19+
let mut res = 0;
20+
let dirs = [1, 0, -1, 0, 1];
21+
while count != 0 && queue.len() != 0 {
22+
let mut len = queue.len();
23+
while len != 0 {
24+
let [x, y] = queue.pop_front().unwrap();
25+
for i in 0..4 {
26+
let new_x = x + dirs[i];
27+
let new_y = y + dirs[i + 1];
28+
if new_x >= 0
29+
&& new_x < m as i32
30+
&& new_y >= 0
31+
&& new_y < n as i32
32+
&& grid[new_x as usize][new_y as usize] == 1
33+
{
34+
grid[new_x as usize][new_y as usize] = 2;
35+
queue.push_back([new_x, new_y]);
36+
count -= 1;
37+
}
38+
}
39+
len -= 1;
40+
}
41+
res += 1;
42+
}
43+
if count != 0 {
44+
return -1;
45+
}
46+
res
47+
}
48+
}

Diff for: solution/0900-0999/0994.Rotting Oranges/Solution.ts

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
function orangesRotting(grid: number[][]): number {
2+
const m = grid.length;
3+
const n = grid[0].length;
4+
let count = 0;
5+
const queue = [];
6+
for (let i = 0; i < m; i++) {
7+
for (let j = 0; j < n; j++) {
8+
if (grid[i][j] === 1) {
9+
count++;
10+
} else if (grid[i][j] === 2) {
11+
queue.push([i, j]);
12+
}
13+
}
14+
}
15+
let res = 0;
16+
const dris = [1, 0, -1, 0, 1];
17+
while (count !== 0 && queue.length !== 0) {
18+
for (let i = queue.length; i > 0; i--) {
19+
const [x, y] = queue.shift();
20+
for (let j = 0; j < 4; j++) {
21+
const newX = x + dris[j];
22+
const newY = y + dris[j + 1];
23+
if (
24+
newX >= 0 &&
25+
newX < m &&
26+
newY >= 0 &&
27+
newY <= n &&
28+
grid[newX][newY] === 1
29+
) {
30+
grid[newX][newY] = 2;
31+
queue.push([newX, newY]);
32+
count--;
33+
}
34+
}
35+
}
36+
res++;
37+
}
38+
if (count != 0) {
39+
return -1;
40+
}
41+
return res;
42+
}

0 commit comments

Comments
 (0)