- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
给定一个值 N,如果我们想找零 N 美分,并且我们有无限供应的每个 S = { S1, S2, .. , Sm} 值(value)的硬币,我们有多少种找零的方法?硬币的顺序无关紧要。
例如,对于 N = 4 和 S = {1,2,3},有四种解决方案:{1,1,1,1},{1,1,2},{2,2}, {1,3}。所以输出应该是4。对于N = 10和S = {2, 5, 3, 6},有五种解决方案:{2,2,2,2,2},{2,2,3,3}, {2,2,6}、{2,3,5} 和 {5,5}。所以输出应该是 5。
现在,我有一个疑问。为什么我们不能做类似的事情,
arr[i] = arr[i-1] + arr[i-2] + arr[i-3]
基本上,arr[i]
存储求和 i
的方法数。我在这里给出的方法有点类似于n stairs problem
,即我可以爬固定数量的楼梯,也就是说,一次爬 1 个楼梯或一次爬 2 个楼梯,并且我必须计算从底部到达顶部的方法总数。为什么我们不能在这个问题上使用类似的方法?
最佳答案
Why can't we use a similar approach in this question?
这是行不通的,因为在 n 阶梯问题中,顺序很重要。例如如果您要爬 5 个楼梯,则 {1, 2, 1, 1} 被视为与 {1, 1, 2, 1} 不同。
然而,在找零的问题中,只有每个硬币的总数,而不是你添加它们的顺序,所以如果你赚 5 美元,{$1, $2, $1, $1} 与 {$1, $1, 2 美元,1 美元}。因此,简单的内存方法不起作用,您需要存储到达 arr[i] 的所有可能方式,而不仅仅是总数。
例如,假设您尝试用 1 美元和 2 美元赚取 6 美元。您不能只将赚取 4 美元的方式的数量添加到赚取 5 美元的方式的数量,因为(例如)赚取 4 美元的方式之一是 {$1, $1, $2}(您可以将 $2 添加到赚取 6 美元,即 {$1, $1, $2, $2}),赚取 5 美元的方法之一是 {$1, $2, $2}(您可以添加 $1 来赚取 $6 {$1, $2, $2, $1}) .
然而,{$1, $2, $2, $1} 和 {$1, $1, $2, $2} 不应单独计算。
关于c++ - 想知道有多少种方法可以在硬币兑换中求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30910246/
为了实现促销代码,我执行了以下步骤: 在 Google Play Console>User Acquisition>Promotions 我添加了促销 Activity 在应用程序中,我使用它来将用户
我希望能够生成链接,允许我的 iOS 应用程序的用户兑换应用程序内购买的促销代码。因此,他们可能会收到一封带有“兑换代码”按钮的电子邮件,该按钮会将他们带到应用商店兑换页面,其中预填充了代码,或者为他
从最近的版本和下面的对话来看,它说现在 Katana(4.1.0) 支持代码流和自动代码赎回(这意味着我们没有明确调用 tokenendpoint 来赎回 idtoken、accesstoken 等的
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我是一名优秀的程序员,十分优秀!