紅寶石非貪婪memoized哈希,硬幣找零的解決方案:硬幣更改遞歸散列(解釋)?
def coin_change amt, denom_arr
coins = Hash.new do |coin, key|
coin[key] = if key < denom_arr.min
[]
elsif denom_arr.include? key
[key]
else
denom_arr.
reject { |coin| coin > key }.
reduce([]) { |memo, denom| memo.any? {|coin| coin%denom==0 } ? memo : memo+[denom] }.
map {|denom| [denom] + coin[key-denom]}.
min { |a, b| a.size <=> b.size }
end
end
coins[amt]
end
p coin_change 6, [4,3,1]
#=> [3,3]
究竟被送入這條線? .reduce([]) { |memo, denom| memo.any? {|coin| coin%denom==0 } ? memo : memo+[denom] }
(據我可以告訴它是一個硬幣<鍵陣列)有人可以告訴我一個如何這個細分的例子?
另外我得到,如果{|coin| coin%denom==0 }
是真的返回memo
但什麼是memo+[denom]
究竟是什麼?
我明白.any?
方法返回真如果塊返回非假或零的值。
我以爲memo
是一個數組,但我打電話給它的類,它返回Class
?
[4,3,8,7].inject([]) { |memo, denom| memo.class }
#=> Class
總之有人可以在步驟與示例輸出解釋:
- 這條線:
.reduce([]) { |memo, denom| memo.any? {|coin| coin%denom==0 } ? memo : memo+[denom] }
- 你能給的遞歸碼哈希鍵/值對每個內容示例迭代? **
** ie。 denom_arr = 4,3,1
和amt = 6
第一次傳遞哈希的樣子是什麼樣的?二次傳遞哈希是什麼樣子?在第三遍等等,直到完成...什麼是散列樣子?
hmm .. http://codereview.stackexchange.com/也許? – quetzalcoatl
@quetzalcoatl我認爲它的套件更好,因爲codereview給我建議我理解代碼,並期待可能優化它,而SO更多是*幫助我理解這種類型的論壇。 – fyz