Javaでのコイン交換の問題を解決する
このチュートリアルでは、動的計画法を使用して、最も一般的なインタビューの質問の1つである「コインの変更」を解決することを楽しみにしています。
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
上記のコードでは、コインの合計とそのコインに到達するために必要なコインの最小数を保持する配列を作成しました。コインごとにこの操作を繰り返すことで、特定の数を集めるのに必要な最小コイン数に達することができます。したがって、私たちは解決策に到達しました。