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];
    }
}
相关推荐
rigidwill66612 分钟前
LeetCode hot 100—最长有效括号
数据结构·c++·算法·leetcode·职场和发展
wuqingshun3141591 小时前
蓝桥杯17. 机器人塔
c++·算法·职场和发展·蓝桥杯·深度优先
图灵科竞社资讯组2 小时前
图论基础:图存+记忆化搜索
算法·图论
chuxinweihui2 小时前
数据结构——栈与队列
c语言·开发语言·数据结构·学习·算法·链表
爱编程的鱼2 小时前
C# 结构(Struct)
开发语言·人工智能·算法·c#
啊我不会诶2 小时前
CF每日4题
算法
uhakadotcom3 小时前
人工智能如何改变医疗行业:简单易懂的基础介绍与实用案例
算法·面试·github
山北雨夜漫步4 小时前
机器学习 Day14 XGboost(极端梯度提升树)算法
人工智能·算法·机器学习
到底怎么取名字不会重复4 小时前
Day10——LeetCode15&560
c++·算法·leetcode·哈希算法·散列表