硬币组合
问题描述
现有1,5,10,25分硬币无限个,要求凑出n分硬币。
返回所有组合个数。
public class 经典硬币表示 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(solution(15));
}
private static int solution(int n) {
if (n <= 0) {
return 0;
}
return f(n, new int[] { 1, 5, 10, 25 }, 3);
}
// 返回在可选最大面值为coins[cur]时,凑出n的方案的组合数
private static int f(int n, int[] coins, int cur) {
if (cur == 0) {
return 1;
}
int ans = 0;
for (int i = 0; i * coins[cur] <= n; i++) {
ans += f(n - i * coins[cur], coins, cur - 1);
}
return ans;
}
}