import java.util.*; public class Solution { /** * 最少货币数 * @param arr int整型一维数组 the array * @param aim int整型 the target * @return int整型 */ public int minMoney (int[] arr, int aim) { int[] dp = new int[aim+1]; dp[0] = 0; int MAX = 10000; // Integer.MAX_INT 直接设置成最大值时 会发现 在 例如235 在i=3 时 //dp[i-arr[j]] +1 会从最大值变成最小值溢出了 所以需要注意 for(int i =1;i<=aim;i++) dp[i] = MAX; for(int i = 0; i<= aim ; i++){ for(int j = 0; j<arr.length; j++ ){ if(i < arr[j]) continue; dp[i] = Math.min(dp[i], dp[i-arr[j]] +1); } } if(dp[aim] == MAX) return -1; else return dp[aim]; } }