import java.util.*; /** * NC203 兑换零钱(二) * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 相同 -> MT13 拼凑面额 * @param target int整型 * @param nums int整型一维数组 * @return int整型 */ public int change (int target, int[] nums) { return solution(target, nums); } /** * 动态规划 * * dp[i]表示拼成金额i的组合个数 * * dp[i] = dp[i-nums[0]] + dp[i-nums[1]] + dp[i-nums[2]] + ... + dp[i-nums[n-2]] + dp[i-nums[n-1]] * * @param target * @param nums * @return */ private int solution(int target, int[] nums){ int[] dp = new int[target+1]; dp[0] = 1; int n = nums.length; for(int i=0; i<n; i++){ for(int j=1; j<=target; j++){ if(j >= nums[i]){ dp[j] += dp[j-nums[i]]; } } } return dp[target]; } }