编辑代码

import java.util.Arrays;

public class CoinCollect {
    public static int coinCollect(int[] coins, int m) {
        int n = coins.length;
        int[][] dp = new int[n+1][m+1];
        for (int i = 0; i <= n; i++) {
            Arrays.fill(dp[i], Integer.MAX_VALUE);
            dp[i][0] = 0;
        }

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                dp[i][j] = dp[i-1][j];
                if (j >= coins[i-1]) {
                    dp[i][j] = Math.min(dp[i][j], dp[i][j-coins[i-1]] + 1);
                }
            }
        }

        return dp[n][m] == Integer.MAX_VALUE ? -1 : dp[n][m];
    }

    public static void main(String[] args) {
        int[] coins = {1, 2, 5};
        int m = 11;
        System.out.println(coinCollect(coins, m)); // expected output: 3

        coins = new int[]{1, 4, 5};
        m = 8;
        System.out.println(coinCollect(coins, m)); // expected output: 2

        coins = new int[]{2};
        m = 3;
        System.out.println(coinCollect(coins, m)); // expected output: -1
    }
}