From 493b9c50c561811772a0dc09b5085ba7e51b770a Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Thu, 25 Sep 2025 21:23:26 +0800 Subject: [PATCH] feat: 120_triangle --- 120_triangle/Cargo.lock | 7 +++++++ 120_triangle/Cargo.toml | 6 ++++++ 120_triangle/src/lib.rs | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 120_triangle/Cargo.lock create mode 100644 120_triangle/Cargo.toml create mode 100644 120_triangle/src/lib.rs diff --git a/120_triangle/Cargo.lock b/120_triangle/Cargo.lock new file mode 100644 index 0000000..36179cd --- /dev/null +++ b/120_triangle/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "triangle" +version = "0.1.0" diff --git a/120_triangle/Cargo.toml b/120_triangle/Cargo.toml new file mode 100644 index 0000000..dc19926 --- /dev/null +++ b/120_triangle/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "triangle" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/120_triangle/src/lib.rs b/120_triangle/src/lib.rs new file mode 100644 index 0000000..576339c --- /dev/null +++ b/120_triangle/src/lib.rs @@ -0,0 +1,37 @@ +pub struct Solution; + +impl Solution { + pub fn minimum_total(triangle: Vec>) -> i32 { + let mut sums = vec![i32::MAX; triangle.len()]; + sums[0] = triangle[0][0]; + + for (layer, nums) in triangle.iter().enumerate() { + if layer == 0 { + continue; + } + + let mut current_sums = vec![]; + for (index, num) in nums[..layer + 1].iter().enumerate() { + let left = if index == 0 { + i32::MAX + } else { + sums[index - 1] + }; + + let right = if index == layer { + i32::MAX + } else { + sums[index] + }; + + current_sums.push(*num + std::cmp::min(left, right)); + } + + for (index, sum) in current_sums.iter().enumerate() { + sums[index] = *sum; + } + } + + *sums.iter().min().unwrap() + } +}