120. Triangle | LeetCode | Swift

vc7-avatar-img
發佈於LeetCode
更新 發佈閱讀 5 分鐘

每日一題

https://leetcode.com/problems/triangle/description/?envType=daily-question&envId=2025-09-19

日期

2025/9/25

raw-image

Bottom-up DP 解法

分析題目之後,會發現這是一題 DP (Dynamic Programming) 的題目,意味著我們需要找到最小的 routine ,再重複執行 routine 取得最終結果。

Routine

自己 + 最小值(下一行[index], 下一行[index + 1])

從底部往上開始走訪:

class Solution {
func minimumTotal(_ triangle: [[Int]]) -> Int {
var dp = triangle[triangle.count - 1]

for i in stride(from: triangle.count - 2, through: 0, by: -1) {
for j in 0..<triangle[i].count {
// Routine:
// 直接更新 dp[j],選擇下一行兩個可能路徑的最小值
dp[j] = triangle[i][j] + min(dp[j], dp[j + 1])
}
}

return dp[0]
}
}

使用高階函式・一行解法

這個 dp 的寫法還算單純,於是試著自己用用看高階函式

參考 ChatGPT 和 iamhands0me 的解法,最後還是 iamhands0me 寫法最漂亮 ,快幫他按讚:

Swift Algorithm 的 adjacentPairs

這個函式可以幫我們把一個陣列變成兩兩一對(文件),例如:

[4, 1, 8, 3]
// 進行 adjacentPairs
// 結果: [(4, 1), (1, 8), (8, 3)]​

這時候再透過 min 就可以找出最小值:

[(4, 1), (1, 8), (8, 3)].map { min($0, $1) }
// 結果: [1, 1, 3]

更精簡一點就可以寫成這樣

[(4, 1), (1, 8), (8, 3)].map(min)
// 結果: [1, 1, 3]

程式碼

邏輯本身大同小異,比較考驗對高階函式的熟練程度。

class Solution {
func minimumTotal(_ triangle: [[Int]]) -> Int {
triangle
.reversed()
// 建立一個基底為 0 的 dummy 陣列給 bottom most row
.reduce(Array(repeating: 0, count: triangle.count + 1)) {
zip(
$1,
$0.adjacentPairs().map(min)
)
.map(+)
}
.first ?? 0
}
}
留言
avatar-img
留言分享你的想法!
avatar-img
萱寫寫
2會員
18內容數
讀書心得、活動參加心得
萱寫寫的其他內容
2025/09/24
2025/09/24
2025/09/23
LeetCode 每日一題: 2025/09/23
2025/09/23
LeetCode 每日一題: 2025/09/23
2025/09/22
2025/09/22
看更多
你可能也想看
Thumbnail
搬家不只添購必需品,更能透過蝦皮分潤計畫賺取零用金!本文分享近期搬家時添購的各種實用好物,包含多功能工作桌、電競椅、氣炸烤箱、收納神器等,並詳述如何透過蝦皮雙 11 活動聰明購物、善用優惠,同時利用分潤機制將敗家行為轉化為被動收入,推薦給想聰明消費又想賺額外收入的你!
Thumbnail
搬家不只添購必需品,更能透過蝦皮分潤計畫賺取零用金!本文分享近期搬家時添購的各種實用好物,包含多功能工作桌、電競椅、氣炸烤箱、收納神器等,並詳述如何透過蝦皮雙 11 活動聰明購物、善用優惠,同時利用分潤機制將敗家行為轉化為被動收入,推薦給想聰明消費又想賺額外收入的你!
Thumbnail
貓奴每月進貢的時間又來啦! 身為專業貢品官,我從蝦皮搜尋各種零食,只為取悅家中三位貓主子!結果究竟會是龍心大悅,亦或是冷眼相待,就讓我們繼續看下去~
Thumbnail
貓奴每月進貢的時間又來啦! 身為專業貢品官,我從蝦皮搜尋各種零食,只為取悅家中三位貓主子!結果究竟會是龍心大悅,亦或是冷眼相待,就讓我們繼續看下去~
Thumbnail
高中數學主題練習—兩向量夾角
Thumbnail
高中數學主題練習—兩向量夾角
Thumbnail
高中數學主題練習—三點共線
Thumbnail
高中數學主題練習—三點共線
Thumbnail
高中數學主題練習—兩點斜率
Thumbnail
高中數學主題練習—兩點斜率
Thumbnail
高中數學主題練習—兩點斜率
Thumbnail
高中數學主題練習—兩點斜率
Thumbnail
高中數學主題練習—兩向量夾角
Thumbnail
高中數學主題練習—兩向量夾角
Thumbnail
高中數學主題練習—最適直線計算
Thumbnail
高中數學主題練習—最適直線計算
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News