当前位置: 首页 > article >正文

leetcode动态规划(十九)-完全平方数

题目

279.完全平方数

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

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

示例 1:

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

示例 2:

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

 

提示:

  • 1 <= n <= 104

思路

一看题目,就思考如何将n进行拆解,如何表达为不同数的平方和,这样就陷入了思维误区里难以走出来了

这个题目换一个角度来描述:

完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?

这就是妥妥的零钱兑换的题目了

动规五步曲

1.确定dp含义

dp[j]表示装满容量为j的背包所需要的物品最少数量是dp[j]

2.确定递推公式

由零钱兑换转换可以得到dp[j] = min(dp[j],dp[j-i*i]+1)

3.初始化

由于是去最小值,所以在创建dp数组的时候就创建为最大值

dp[0] = 0

4.遍历顺序

在这里熟悉先物品后背包的方式,还是采用这种方式

但在遍历物品的时候,物品的数量是未知的,所以物品能够到的最大值是(n**0.5)+1

5.打印dp数组

代码

class Solution:
    def numSquares(self, n: int) -> int:
        dp = [float('inf')]*(n+1)
        dp[0] = 0
        for i in range(1,int(n**0.5)+1):
            for j in range(i*i,n+1):
                if i*i<=j:
                    dp[j] = min(dp[j],dp[j-i*i]+1)
        return dp[n]
        


http://www.kler.cn/news/364050.html

相关文章:

  • 第三十一篇:TCP协议如何解决丢包的问题,TCP系列六
  • AIGC实战——世界模型(World Model)
  • Perl打印9x9乘法口诀
  • Spring Boot配置文件不识别变量的解决方案
  • 网络爬虫-Python网络爬虫和C#网络爬虫
  • Lua表(Table)
  • 前端实现监控埋点
  • Linux——进程基础
  • 智联招聘×Milvus:向量召回技术提升招聘匹配效率
  • 华为配置 之 远程管理配置
  • 在pycharm中使用sqllite
  • 通过使用Visual Studio将你的程序一键发布到Docker
  • JavaWeb合集15-线程局部变量ThreadLocal
  • sentinel原理源码分析系列(八)-熔断
  • 十六、行为型(责任链模式)
  • 2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • PHP企业门店订货通进销存系统小程序源码
  • 定位中的信号干扰与噪声处理
  • 手机群控软件苹果iOS批量控制进化历程 解析及最新动态
  • 普通数组矩阵
  • 西南大学软件专硕考研难度分析!
  • 配置观察端口
  • 【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)
  • 图集短视频去水印云函数开发实践——小红书
  • 小白投资理财 - 解读市销率,市现率
  • 新电脑Win11家庭中文版跳过联网激活方法(教程)