tôi đi qua các giải pháp sau để vấn đề DP của counting change:thay đổi Đếm trong Haskell
count' :: Int -> [Int] -> Int
count' cents coins = aux coins !! cents
where aux = foldr addCoin (1:repeat 0)
where addCoin c oldlist = newlist
where newlist = (take c oldlist) ++ zipWith (+) newlist (drop c oldlist)
Nó chạy nhanh hơn rất nhiều so với giải pháp đệ quy trên xuống ngây thơ của tôi, và tôi vẫn đang cố gắng để hiểu nó.
Tôi nhận được danh sách tiền xu, aux
tính toán mọi giải pháp cho các số nguyên dương. Vì vậy, giải pháp cho một số tiền là lập chỉ mục danh sách tại vị trí đó.
Tôi ít rõ ràng hơn vào addCoin
. Nó bằng cách nào đó sử dụng giá trị của mỗi đồng tiền để rút ra các yếu tố từ danh sách tiền xu? Tôi đang đấu tranh để tìm một ý nghĩa trực quan cho nó.
Lần in trong aux
cũng liên kết bộ não của tôi bằng nút thắt. Tại sao 1:repeat 0
giá trị ban đầu? Nó đại diện cho cái gì?
Cảm ơn câu trả lời rõ ràng và chi tiết! – user1953221