正如您所说,这是一个非常好的解决方案。该代码通过每次硬币面额的每次迭代为1-200的迭代建立。
case_num数组最初由[1,0,0,0,0,0,0 ... 0,0,0,0]组成
这些数字(除了初始1)的意思是,您可以使用P_LIST中的硬币在迄今为止遍历的P_LIST中使用硬币来建立几种方法(由数字的索引表示)。
p_list中的第一枚硬币为1。因此,如果1可以安装在索引中,则将其在上一个索引中获取并将其添加到当前索引中。这起作用是因为如果有5种已知的方法可以达到25,而您刚刚找到了1号尺寸的硬币,那么也将有5种方法可以达到26。 。
因此,在使用1迭代后,您最终会得到[1、1、1、1、1 ... 1、1
现在您在硬币中移动。这次,您使用的硬币为2。让我们仔细阅读该过程1。如果2较少,则索引,则将到达上一个索引的方法添加到当前索引。
例如,2不适合索引1,但确实适合索引2。因此,您只是创建了一种从0到2的新方法,因此您可以采用所有可以达到0的方法并将其添加到当前索引中。在索引27上,索引中有2个适合,因此您采用了可以达到25的方式并将它们添加到27的数量,因为现在您有(所有这些方法可以达到25 +一个2硬币) +(所有的方式)您必须达到27,然后才知道自己有2个尺寸的硬币)。
因此,在使用2迭代后,您最终将得到[1、2、2、3、3、4、4 ...
如果您仍然遇到麻烦,那么尝试浏览整个程序可能是值得的(也许总数减少了50,而不是200个)。