这两题其实很相似,即第377题去重之后就成了518的答案。查看二者的代码也是及其相似,几乎就是内外循环调换过来了:
这种小而精的问题值得好好琢磨总结。
//leetcode377
public int combinationSum4(int[] coins, int amount) {int[]dp=new int[amount+1];dp[0]=1;Arrays.sort(coins);for(int x=1;x<=amount;x++){for(int coin:coins){if(x<coin])break;dp[x]+=dp[x-coin];}}return dp[amount];}
//leetcode518
public int change(int amount, int[] coins) {int[] dp = new int[amount + 1];dp[0] = 1;for (int coin : coins) {for (int x = coin; x <= amount; ++x) {dp[x] += dp[x - coin];}}return dp[amount];}