Skip to content

Commit 08b0bf4

Browse files
committed
Runtime: 20 ms (Top 100.0%) | Memory: 3.30 MB (Top 66.67%)
1 parent fcc73a0 commit 08b0bf4

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Runtime: 20 ms (Top 100.0%) | Memory: 3.30 MB (Top 66.67%)
2+
3+
impl Solution {
4+
pub fn max_moves(grid: Vec<Vec<i32>>) -> i32 {
5+
let mut dp = vec![vec![-1; grid[0].len()]; grid.len()];
6+
(0..grid.len())
7+
.map(|row| Self::traverse(&grid, row, 0, &mut dp))
8+
.max()
9+
.unwrap() - 1
10+
}
11+
12+
fn traverse(grid: &[Vec<i32>], row: usize, col: usize, dp: &mut [Vec<i32>]) -> i32 {
13+
if dp[row][col] != -1 {
14+
return dp[row][col];
15+
}
16+
17+
if col + 1 >= grid[0].len() {
18+
return 1;
19+
}
20+
21+
let mut t = 0;
22+
if row > 0 && grid[row][col] < grid[row - 1][col + 1] {
23+
t = t.max(Self::traverse(grid, row - 1, col + 1, dp));
24+
}
25+
if grid[row][col] < grid[row][col + 1] {
26+
t = t.max(Self::traverse(grid, row, col + 1, dp));
27+
}
28+
if row + 1 < grid.len() && grid[row][col] < grid[row + 1][col + 1] {
29+
t = t.max(Self::traverse(grid, row + 1, col + 1, dp));
30+
}
31+
dp[row][col] = t + 1;
32+
dp[row][col]
33+
}
34+
}

0 commit comments

Comments
 (0)