9.13 | day 6 |day 45| to 完全平方数

● 70. 爬楼梯 (进阶)

class Solution {
    public int climbStairs(int n) {
    int[] dp = new int[n+1];//设置背包容量:n个
    int m =2;//有两个物品,注意这是一个完全背包问题
    dp[0] = 1;//initialize
​
    for(int i = 1;i<=n;i++){//遍历背包
        for(int j = 1;j<=m;j++){//遍历物品
           if(i >=  j) dp[i] += dp[i-j];
           //走了 j 步,就还剩下i-j
           //而dp[i]是指到达i层的总方法数
        }
    }
    return dp[n];
    }
}

9.13 | day 6 |day 45| to 完全平方数_第1张图片

● 322. 零钱兑换

class Solution {
    public int coinChange(int[] coins, int amount) {
  // 注意题目中说的是最少硬币书,与排列和组合都没有关系,所以for循环顺序随便,因为我们始终要遍历物品和背包
  int max = Integer.MAX_VALUE;
  int[] dp = new int[amount+1];
  dp[0] = 0;
  for(int i  =1;i<=amount;i++){
      dp[i] = max;
  }
 
for(int i = 0;i 
  

● 279.完全平方数

class Solution {
    public int numSquares(int n) {
     int[] dp = new int[n+1];//背包容量
     int max = Integer.MAX_VALUE;
     for(int i =1;i<=n;i++){
         dp[i] = max;
     }
     for(int i = 1;i*i<=n;i++){//遍历每个物品
         for(int j = i*i;j<=n;j++){//遍历背包
             if(dp[j-i*i]!=max){
                 dp[j] = Math.min(dp[j],dp[j-i*i]+1);
             }
         }
     }
     return dp[n];
    }
}

你可能感兴趣的:(算法,leetcode,动态规划)