首页 > 编程语言 >【算法训练营day45】LeetCode70. 爬楼梯(进阶) LeetCode322. 零钱兑换 LeetCode279. 完全平方数

【算法训练营day45】LeetCode70. 爬楼梯(进阶) LeetCode322. 零钱兑换 LeetCode279. 完全平方数

时间:2023-02-15 22:25:32浏览次数:58  
标签:LeetCode70 进阶 int MAX coins LeetCode279 amount vector dp

LeetCode70. 爬楼梯(进阶)

题目链接:70. 爬楼梯(进阶)

独上高楼,望尽天涯路

可以把爬楼梯看成是一个排序问题加完全背包。

class Solution {
public:
    int climbStairs(int n) {
        vector<int> stairs = {1, 2};
        vector<int> dp(n + 1, 0);
        dp[0] = 1;
        for (int j = 0; j < n + 1; j++) {
            for (int i = 0; i < stairs.size(); i++) {
                if (j - stairs[i] >= 0) dp[j] += dp[j - stairs[i]];
            }
        }
        return dp[n];
    }
};

慕然回首,灯火阑珊处

思路一样。


LeetCode322. 零钱兑换

题目链接:322. 零钱兑换

独上高楼,望尽天涯路

看起来和之前套路一样的题,写起来还是有很多细节需要注意的。

慕然回首,灯火阑珊处

这是典型的完全背包问题,用到了新的递推公式dp[j] = min(dp[j], dp[j - coins[i]] + 1)

因为目标是最小的硬币个数,所以在初始化的时候需要初始化为最大值。

因为硬币的顺序不影响最后结果,所以内外层遍历可以互换。

class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount + 1, INT_MAX); // 注意需要初始化为INT_MAX
        dp[0] = 0;
        for (int i = 0; i < coins.size(); i++) {
            for (int j = coins[i]; j < amount + 1; j++) {
                // 这里的含义是如果选择物品i,剩下的背包容量不能正好被其他物品填满,则不更新dp[j]
                if (dp[j - coins[i]] != INT_MAX) { 
                    dp[j] = min(dp[j], dp[j - coins[i]] + 1);
                }
            }
        }
        if(dp[amount] == INT_MAX) return -1;
        return dp[amount];
    }
};

LeetCode279. 完全平方数

题目链接:279. 完全平方数

独上高楼,望尽天涯路

和上一道题差不多,也是求最小数量的。

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1, INT_MAX);
        dp[0] = 0;
        for (int i = 1; i * i <= n; i++) {
            for (int j = i * i; j < n + 1; j++) {
                    dp[j] = min(dp[j], dp[j - i * i] + 1);
            }
        }
        return dp[n];
    }
};

慕然回首,灯火阑珊处

思路一样。

标签:LeetCode70,进阶,int,MAX,coins,LeetCode279,amount,vector,dp
From: https://www.cnblogs.com/BarcelonaTong/p/17124939.html

相关文章

  • 2023年第 3 期《Python 测试平台开发》进阶课程(3月5号开学)
    2023年第3期《Python测试平台开发》进阶课程主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:3月5报名费:报名费3800一人(周期3个月,之前学过《pytho......
  • 【Python21天学习挑战赛】- 函数进阶
    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。文章目录​​1函数的初识​​​​1.1定义一个函数​​​​1.2函数的调用​​​​1.3函......
  • 测试进阶之路—新手关于测试碎碎念篇
    作者:京东科技JDStar王绮适用对象:测试新人可阅读对象:all注:欢迎留言与私聊补充1、测试用例设计1、基本的测试用例设计方法•基本的测试用例设计方法(边界值分析、等价类划分等......
  • Vue.$nextTick的原理是什么-vue面试进阶
    原理性的东西就会文字较多,请耐下心来,细细品味Vue中DOM更新机制当你气势汹汹地使用Vue大展宏图的时候,突然发现,咦,我明明对这个数据进行更改了,但是当我获取它的时候怎么是上......
  • test29 指针进阶3-8
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<assert.h>#include<stdlib.h>#include<string.h>//一级指针接收地址或者指针voidprint(int*ptr,in......
  • 蜗牛式学习Java--基础进阶2--常用API(Scanner,String,StringBuilder)
     1.2键盘录入字符串Scanner类:next():遇到了空格,就不再录入数据了,结束标记:空格,tab键nextLine():可以将数据完整的接收过来,结束标记:回......
  • 蜗牛式学习Java--基础进阶--面向对象1
    1.2类的定义 1.3对象的创建和使用 2.1成员变量和局部变量 2.2this关键字 5.1构造方法的格式和执行时机 5.4标准类的代码编写和......
  • MySQL - 进阶
    1、存储引擎MySQL体系结构:连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所......
  • Python 高级编程之生成器与协程进阶(五)
    目录一、概述二、生成器1)生成器和迭代器的区别2)生成器创建方式1、通过生成器函数创建2、通过生成器表达式创建3)生成器表达式4)yield关键字5)生成器函数6)return和yield异同......
  • 好客租房46-react组件进阶目标
    1能够使用props接收数据2能够使用父子组件之间的通讯3能够实现兄弟组件之间的通讯4能够给组件添加props校验5能够说出生命周期常用的钩子函数6能够知道高阶组件的作用组件通......