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?