【发布时间】:2014-07-26 19:13:07
【问题描述】:
我需要从denom_arr 中获取所有可能的数字组合,它们等于amt。
denom_arr = [4,3,1]
amt = 10
这种情况会产生:
[4, 4, 1, 1][3, 3, 3, 1][1, 1, 1, 1, 1, 1, 1, 1, 1, 1][4, 3, 1, 1, 1][4, 3, 3]- 。 . . (其他情况...)
问题是我写的代码在 1-3 之后被破坏了,我不知道如何让它在同一个索引上循环以获取 case 4-6+
set, sets = [], []
i = 0
loop do
i = 0 if denom_arr[i].nil?
loop do
set << denom_arr[i]
break if set.inject(:+) > amt
end
set.pop if set.inject(:+) > amt
if set.inject(:+) == amt
sets << set
set = []
denom_arr.shift
end
i += 1
sets
break if denom_arr.empty?
end
更新
我知道这可以通过使用记忆/动态编程技术的递归来完成,但为了测试理论,我正试图严格地在循环中执行此操作。
【问题讨论】:
-
[4,3,1,1,1] 怎么样?
-
@BroiSatse 是的很好。我觉得我错过了一些东西。问题更新了。
-
还有很多其他情况:4 和 1,两个 3 和 1,一个 3 和 1,...
-
@MxyL 是的,正确...我只是真的关心最短的情况..
-
那是什么理论?