题目描述
有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。
给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。
测试样例:
6
返回:2
题目分析:这道题可以用递归做出来,而且只需要返回结果。这道题中每次要知道的是剩余硬币的数量,当剩余硬币数量不能再分时(剩一个)时,这就算一种分法。每次分的时候变的是硬币的面值。
总结:这种类似树的结构的遍历一般使用递归比较方便。
int fun(int n, int coin)
{
int nextcoin=0;
switch(coin)
{
case 25:
nextcoin=10; break;
case 10:
nextcoin=5; break;
case 5:
nextcoin=1; break;
case 1:
return 1;
}
int res=0;
for(int i=0;i*coin<=n;i++)
{
res+=fun(n-i*coin, nextcoin)%1000000007;
}
return res%1000000007;//%1000000007
}