Skip to content

Commit a0b7230

Browse files
committed
solve #120
1 parent 01cf5b9 commit a0b7230

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,4 @@ mod n0114_flatten_binary_tree_to_linked_list;
118118
mod n0115_distinct_subsequences;
119119
mod n0118_pascals_triangle;
120120
mod n0119_pascals_triangle_ii;
121+
mod n0120_triangle;

src/n0120_triangle.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
* [120] Triangle
3+
*
4+
* Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.
5+
*
6+
* For example, given the following triangle
7+
*
8+
*
9+
* [
10+
* [2],
11+
* [3,4],
12+
* [6,5,7],
13+
* [4,1,8,3]
14+
* ]
15+
*
16+
*
17+
* The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).
18+
*
19+
* Note:
20+
*
21+
* Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.
22+
*
23+
*/
24+
pub struct Solution {}
25+
26+
// submission codes start here
27+
28+
impl Solution {
29+
pub fn minimum_total(triangle: Vec<Vec<i32>>) -> i32 {
30+
let mut cache = vec![0; triangle.len()];
31+
for row in triangle.iter() {
32+
let mut prev = 0;
33+
for i in 0..row.len() {
34+
let temp = cache[i];
35+
cache[i] = if i == 0 {
36+
cache[i]
37+
} else if i == row.len() - 1 {
38+
prev
39+
} else {
40+
i32::min(cache[i], prev)
41+
} + row[i];
42+
prev = temp;
43+
}
44+
}
45+
cache.into_iter().fold(i32::max_value(), |min, x| i32::min(min, x))
46+
}
47+
}
48+
49+
// submission codes end
50+
51+
#[cfg(test)]
52+
mod tests {
53+
use super::*;
54+
55+
#[test]
56+
fn test_120() {
57+
assert_eq!(
58+
Solution::minimum_total(
59+
vec![
60+
vec![2],
61+
vec![3,4],
62+
vec![6,5,7],
63+
vec![4,1,8,3]
64+
]
65+
),
66+
11
67+
)
68+
}
69+
}

0 commit comments

Comments
 (0)