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];
    }
}

● 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<coins.length;i++){
    for(int j = coins[i];j<=amount;j++){//还是对每个硬币进行遍历,只是根据硬币来看的
        //肯定是j-coins[i],不是j本身哈,这样保证了从0开始
        if(dp[j - coins[i]]!=max){
            dp[j] = Math.min(dp[j],dp[j-coins[i]]+1);
        }
    }
}
return dp[amount]==max?-1:dp[amount];
  }
    }
​

● 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];
    }
}
相关推荐
Kenneth風车几秒前
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
算法·机器学习·分类
eternal__day8 分钟前
数据结构(哈希表(中)纯概念版)
java·数据结构·算法·哈希算法·推荐算法
APP 肖提莫18 分钟前
MyBatis-Plus分页拦截器,源码的重构(重构total总数的计算逻辑)
java·前端·算法
OTWOL26 分钟前
两道数组有关的OJ练习题
c语言·开发语言·数据结构·c++·算法
qq_433554541 小时前
C++ 面向对象编程:递增重载
开发语言·c++·算法
带多刺的玫瑰1 小时前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法
巫师不要去魔法部乱说1 小时前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
qystca2 小时前
洛谷 P11242 碧树 C语言
数据结构·算法
冠位观测者2 小时前
【Leetcode 热题 100】124. 二叉树中的最大路径和
数据结构·算法·leetcode
悲伤小伞2 小时前
C++_数据结构_详解二叉搜索树
c语言·数据结构·c++·笔记·算法