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];
    }
}
相关推荐
莫叫石榴姐32 分钟前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
茶猫_1 小时前
力扣面试题 - 25 二进制数转字符串
c语言·算法·leetcode·职场和发展
肥猪猪爸4 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
readmancynn4 小时前
二分基本实现
数据结构·算法
萝卜兽编程4 小时前
优先级队列
c++·算法
盼海4 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步4 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln5 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展
芜湖_5 小时前
【山大909算法题】2014-T1
算法·c·单链表
珹洺5 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode