• leetcode 70.爬楼梯、322.零钱兑换、279.完全平方数


    70. 爬楼梯(进阶版)

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个或m个(m<=n)台阶。你有多少种不同的方法可以爬到楼顶呢?

    示例 1:

    输入:n = 2
    输出:2
    解释:有两种方法可以爬到楼顶。
    1. 1 阶 + 1 阶
    2. 2 阶

    示例 2:

    输入:n = 3
    输出:3
    解释:有三种方法可以爬到楼顶。
    1. 1 阶 + 1 阶 + 1 阶
    2. 1 阶 + 2 阶
    3. 2 阶 + 1 阶

    思路:

    dp[j]表示爬到j层的方法有dp[j]种方法

    递推公式 dp[j] += dp[j-i];

    初始化 dp[0] = 1,其他为0

    遍历顺序 先遍历背包后遍历物品,从小到大

    打印dp数组

    代码:
    1. class Solution {
    2. public:
    3. int climbStairs(int n) {
    4. vector<int> dp(n + 1, 0);
    5. dp[0] = 1;
    6. for (int i = 1; i <= n; i++) { // 遍历背包
    7. for (int j = 1; j <= m; j++) { // 遍历物品
    8. if (i - j >= 0) dp[i] += dp[i - j];
    9. }
    10. }
    11. return dp[n];
    12. }
    13. };

    322.零钱兑换

    给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

    计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

    你可以认为每种硬币的数量是无限的。

    示例 1:

    输入:coins = [1, 2, 5], amount = 11
    输出:3 
    解释:11 = 5 + 5 + 1

    示例 2:

    输入:coins = [2], amount = 3
    输出:-1

    示例 3:

    输入:coins = [1], amount = 0
    输出:0
    思路:

            //dp[j]表示amount为j 的最少的硬币个数为dp[j]

            //递推公式 dp[j] = min(dp[j],dp[j-coins[i]]+1);

            //初始化dp[0] = 0;

            //遍历顺序,完全背包,类似于求排列数,先背包后物品

            //打印dp数组

    代码:
    1. class Solution {
    2. public:
    3. int coinChange(vector<int>& coins, int amount) {
    4. //dp[j]表示amount为j 的最少的硬币个数为dp[j]
    5. //递推公式 dp[j] = min(dp[j],dp[j-coins[i]]+1);
    6. //初始化dp[0] = 0;
    7. //遍历顺序,完全背包,类似于求排列数,先背包后物品
    8. //打印dp数组
    9. vector<int>dp(amount+1,INT_MAX);
    10. dp[0] = 0;
    11. for(int j = 0;j<=amount;j++)
    12. {
    13. for(int i = 0;isize();i++)
    14. {
    15. if(j-coins[i]>=0&&dp[j-coins[i]]!=INT_MAX)
    16. {
    17. dp[j] = min(dp[j],dp[j-coins[i]]+1);
    18. }
    19. }
    20. }
    21. if(dp[amount]==INT_MAX) return -1;
    22. return dp[amount];
    23. }
    24. };

    279.完全平方数

    给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。

    完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149 和 16 都是完全平方数,而 3 和 11 不是。

    示例 1:

    输入:n = 12
    输出:3 
    解释:12 = 4 + 4 + 4

    示例 2:

    输入:n = 13
    输出:2
    解释:13 = 4 + 9

     

    思路:

            /*

                dp[j] 表示和为j的完全平方数的最少数量

                递推公式 dp[j] = min(dp[j],dp[j-i*i]+1);

                初始化 dp[0] = 0;其他初始为 INT_MAX

                遍历顺序 先遍历背包再遍历物品,从小到大

                打印dp数组

            */

    代码:
    1. class Solution {
    2. public:
    3. int numSquares(int n) {
    4. /*
    5. dp[j] 表示和为j的完全平方数的最少数量
    6. 递推公式 dp[j] = min(dp[j],dp[j-i*i]+1);
    7. 初始化 dp[0] = 0;其他初始为 INT_MAX
    8. 遍历顺序 先遍历背包再遍历物品,从小到大
    9. 打印dp数组
    10. */
    11. vector<int>dp(n+1,INT_MAX);
    12. dp[0] = 0;
    13. for(int j = 0;j<=n;j++)
    14. {
    15. for(int i = 1;i*i<=j;i++)
    16. {
    17. if(dp[j-i*i]!=INT_MAX)
    18. dp[j] = min(dp[j],dp[j-i*i]+1);
    19. }
    20. }
    21. return dp[n];
    22. }
    23. };

    还有很多瑕疵,还需继续坚持!

  • 相关阅读:
    基于人工智能的智能化指挥决策和控制
    数据新增的常用方法(es6-es12)-今天一定要学会
    【云原生】EF(filebeat)K 日志收集平台
    使用QFtp实现文件上传
    docker安装部署nginx
    MySQL 游标的详解
    【Markdown】编辑器使用技巧大汇总1。CSDN如何使用Markdown编辑器?如何在CSDN中输入数学公式?数学公式中如何输入上标和下标?
    详解差分进化算法:从基础到小生境(Niche)技术与多目标优化在Python的实现
    线程池工作原理及参数
    【云原生】查看 Docker 容器启动命令和相关参数
  • 原文地址:https://blog.csdn.net/qq_63098229/article/details/133710954