题目1:【二刷完成】
import java.util.Scanner;
class climbStairs{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int m, n;
while (sc.hasNextInt()) {
n = sc.nextInt();
m = sc.nextInt();
int[] dp = new int[n + 1];
dp[0] = 1;
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= m; i++) {
if (j - i >= 0) dp[j] += dp[j - i];
}
}
System.out.println(dp[n]);
}
}
}
题目2:【二刷完成】
class Solution {
public int coinChange(int[] coins, int amount) {
int[] dp = new int[amount+1];
dp[0] = 0;
for (int i=1;i<dp.length;i++){
dp[i]=Integer.MAX_VALUE-1;
}
for (int i=0;i<coins.length;i++){
for (int j=coins[i];j<=amount;j++){
//if (dp[j-coins[i]]!=Integer.MAX_VALUE){//如果dp[j-coins[i]]不是初始值,则进行状态转换
dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);
//}
}
}
return dp[amount]==Integer.MAX_VALUE-1 ? -1 : dp[amount];
}
}
题目3:【二刷完成】
class Solution {
public int numSquares(int n) {
int[] dp = new int[n+1];
for (int i=0;i<dp.length;i++){
dp[i] = Integer.MAX_VALUE-1;//会出现dp[]+1的情况,但是Integer.MAX_VALUE+1=Integer.MIN_VALUE
}
dp[0] = 0;
for (int i=0;i*i<=n;i++){
for (int j=i*i;j<=n;j++){
dp[j] = Math.min(dp[j],dp[j-i*i]+1);
}
}
return dp[n];
}
}