518. 零钱兑换 II(中等)
class Solution {
public int change(int amount, int[] coins) {
int dp[] = new int[amount+1];
dp[0] = 1;
for(int j=0;j<coins.length;j++)
for(int i=1;i<=amount;i++){
if(i>=coins[j])dp[i]+=dp[i-coins[j]];
}
return dp[amount];
}
}
377. 组合总和 Ⅳ(中等)
class Solution {
public int combinationSum4(int[] nums, int target) {
int dp[] = new int[target+1];
dp[0] = 1;
for(int i=1;i<=target;i++)
for(int num:nums){
if(i>=num)dp[i] += dp[i-num];
}
return dp[target];
}
}
322. 零钱兑换(中等)
class Solution {
public int coinChange(int[] coins, int amount) {
int dp[] = new int[amount+1];
Arrays.fill(dp,amount+1);
dp[0] = 0;
for(int i=1;i<=amount;i++)
for(int coin:coins){
if(i>=coin && dp[i - coin]!=amount+1)
dp[i] = Math.min(dp[i],dp[i-coin]+1);
}
return dp[amount]==amount+1?-1:dp[amount];
}
}
279. 完全平方数(中等)
class Solution {
public int numSquares(int n) {
List<Integer> nums = find(n);
int dp[] = new int[n+1];
Arrays.fill(dp,n+1);
dp[0] = 0;
for(int i=1;i<=n;i++)
for(int num : nums){
if(i>=num && dp[i-num]!=n+1)
dp[i] = Math.min(dp[i],dp[i-num]+1);
}
return dp[n];
}
public List<Integer> find(int n){
List<Integer> res = new ArrayList<>();
for(int i=1;i*i<=n;i++){
res.add(i*i);
}
return res;
}
}