Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c6b4e43

Browse files
feat: add solutions to lc problem: No.0909 (doocs#4451)
No.0909.Snakes and Ladders
1 parent 3ddd4aa commit c6b4e43

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

‎solution/0900-0999/0909.Snakes and Ladders/README.md‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,52 @@ function snakesAndLadders(board: number[][]): number {
279279
}
280280
```
281281

282+
#### Rust
283+
284+
```rust
285+
use std::collections::{HashSet, VecDeque};
286+
287+
impl Solution {
288+
pub fn snakes_and_ladders(board: Vec<Vec<i32>>) -> i32 {
289+
let n = board.len();
290+
let m = (n * n) as i32;
291+
let mut q = VecDeque::new();
292+
q.push_back(1);
293+
let mut vis = HashSet::new();
294+
vis.insert(1);
295+
let mut ans = 0;
296+
297+
while !q.is_empty() {
298+
for _ in 0..q.len() {
299+
let x = q.pop_front().unwrap();
300+
if x == m {
301+
return ans;
302+
}
303+
for y in x + 1..=i32::min(x + 6, m) {
304+
let (mut i, mut j) = ((y - 1) / n as i32, (y - 1) % n as i32);
305+
if i % 2 == 1 {
306+
j = (n as i32 - 1) - j;
307+
}
308+
i = (n as i32 - 1) - i;
309+
let z = if board[i as usize][j as usize] == -1 {
310+
y
311+
} else {
312+
board[i as usize][j as usize]
313+
};
314+
if !vis.contains(&z) {
315+
vis.insert(z);
316+
q.push_back(z);
317+
}
318+
}
319+
}
320+
ans += 1;
321+
}
322+
323+
-1
324+
}
325+
}
326+
```
327+
282328
<!-- tabs:end -->
283329

284330
<!-- solution:end -->

‎solution/0900-0999/0909.Snakes and Ladders/README_EN.md‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,52 @@ function snakesAndLadders(board: number[][]): number {
277277
}
278278
```
279279

280+
#### Rust
281+
282+
```rust
283+
use std::collections::{HashSet, VecDeque};
284+
285+
impl Solution {
286+
pub fn snakes_and_ladders(board: Vec<Vec<i32>>) -> i32 {
287+
let n = board.len();
288+
let m = (n * n) as i32;
289+
let mut q = VecDeque::new();
290+
q.push_back(1);
291+
let mut vis = HashSet::new();
292+
vis.insert(1);
293+
let mut ans = 0;
294+
295+
while !q.is_empty() {
296+
for _ in 0..q.len() {
297+
let x = q.pop_front().unwrap();
298+
if x == m {
299+
return ans;
300+
}
301+
for y in x + 1..=i32::min(x + 6, m) {
302+
let (mut i, mut j) = ((y - 1) / n as i32, (y - 1) % n as i32);
303+
if i % 2 == 1 {
304+
j = (n as i32 - 1) - j;
305+
}
306+
i = (n as i32 - 1) - i;
307+
let z = if board[i as usize][j as usize] == -1 {
308+
y
309+
} else {
310+
board[i as usize][j as usize]
311+
};
312+
if !vis.contains(&z) {
313+
vis.insert(z);
314+
q.push_back(z);
315+
}
316+
}
317+
}
318+
ans += 1;
319+
}
320+
321+
-1
322+
}
323+
}
324+
```
325+
280326
<!-- tabs:end -->
281327

282328
<!-- solution:end -->
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use std::collections::{HashSet, VecDeque};
2+
3+
impl Solution {
4+
pub fn snakes_and_ladders(board: Vec<Vec<i32>>) -> i32 {
5+
let n = board.len();
6+
let m = (n * n) as i32;
7+
let mut q = VecDeque::new();
8+
q.push_back(1);
9+
let mut vis = HashSet::new();
10+
vis.insert(1);
11+
let mut ans = 0;
12+
13+
while !q.is_empty() {
14+
for _ in 0..q.len() {
15+
let x = q.pop_front().unwrap();
16+
if x == m {
17+
return ans;
18+
}
19+
for y in x + 1..=i32::min(x + 6, m) {
20+
let (mut i, mut j) = ((y - 1) / n as i32, (y - 1) % n as i32);
21+
if i % 2 == 1 {
22+
j = (n as i32 - 1) - j;
23+
}
24+
i = (n as i32 - 1) - i;
25+
let z = if board[i as usize][j as usize] == -1 {
26+
y
27+
} else {
28+
board[i as usize][j as usize]
29+
};
30+
if !vis.contains(&z) {
31+
vis.insert(z);
32+
q.push_back(z);
33+
}
34+
}
35+
}
36+
ans += 1;
37+
}
38+
39+
-1
40+
}
41+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /