解决Java中的硬币找零问题
在本教程中,我们期待使用动态编程解决最常见的面试问题之一“硬币找零”。
使用Java中的有效方法解决硬币找零问题
在动态编程方法中,我们使用额外的空间复杂度dp [amount + 1]并存储先前的结果。我们取一枚硬币,并开始存储组成一定数量所需的硬币数量(通过迭代到原始数量)。然后,我们用当前所需的最小硬币数和使用该特定硬币的所需硬币数来更新dp [i]。然后只需检查是否有一些结果达到dp [amount],否则返回-1表示不可能补足该数量。
让我们为此编写代码。
import java.util.*;
public class Main {
public static void main(String args[]) {
int coins[] = { 1, 2, 5};
int amount = 11;
int dp[] = new int[amount+1];
dp[0] = 0;
for(int i = 1; i <= amount; i++){
dp[i] = amount+1;
}
for(int coin : coins){
for(int amt = 1; amt <= amount ; amt++){
if(amt >= coin){
dp[amt] = Math.min(dp[amt], 1 + dp[amt - coin]);
}
}
}
int minCoinsReq = dp[amount] != amount+1 ? dp[amount] : -1 ;
System.out.println("Minimum Coins required : " + minCoinsReq);
}
}
输出 :
最低硬币要求:3
在上面的代码中,我们只是创建了一个数组,以保留可以由任何硬币和达到该硬币所需的最小硬币数量来求和的金额。对于每个硬币重复此操作,我们可以达到收集特定数量所需的最小硬币数量。因此,我们达成了解决方案。