322. Coin Change
brute force
recursive like a tree, then do BFS, find the level which can subtract to 0 (11 -1 - 5 - 5 = 0
time: O(n^k), k is coins type
DFS + memo (top down)
T: O(kn)
S: O(n)
DP (bottom up
有幾種硬幣, 組成 amount => 是不是很像爬樓梯問題
subproblem & dp array:
f(n) = min ( f(n-k) ), for k in [1,2,3]) + 1

time: O(kn), n: amount, k: coins' number, O(n)
space: O(n), n: amount
當前填滿容量 dp[i] 最少需要的硬幣 =
min(之前填滿容量 dp[i] 最少需要的硬幣 , 填滿容量 dp[i - coin 需要的硬幣 + 1個當前硬幣] . )
for loop 去變換 coin 需要的硬幣, f(n) = min ( f(n-k) ), for k in [1,2,3]) + 1
因為是多個 f(n-k) 要找最小,

所以在 dp[i] 取得值, 要 Math.min(dp[i], dp[i-coins[j]+1)
Math.min(dp[i] . => 代表之前 Math.min(dp[i], dp[i-coins[j]+1) => dp[i-coins[j]+1算出的結果
new version
Last updated
Was this helpful?