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

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】

  • 题目描述:
  • 解题思路一:Python 动态规划五部曲(完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?)
  • 解题思路二:0
  • 解题思路三:0

题目描述:

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

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

示例 1:

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

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

提示:

1 <= n <= 104

解题思路一:Python 动态规划五部曲(完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?)

  1. 确定dp数组(dp table)以及下标的含义
    dp[j]:和为j的完全平方数的最少数量为dp[j]

  2. 确定递推公式
    dp[j] 可以由dp[j - i * i]推出, dp[j - i * i] + 1 便可以凑成dp[j]。

此时我们要选择最小的dp[j],所以递推公式:dp[j] = min(dp[j - i * i] + 1, dp[j]);

  1. dp数组如何初始化
    dp[0]表示 和为0的完全平方数的最小数量,那么dp[0]一定是0。

有同学问题,那0 * 0 也算是一种啊,为啥dp[0] 就是 0呢?

看题目描述,找到若干个完全平方数(比如 1, 4, 9, 16, …),题目描述中可没说要从0开始,dp[0]=0完全是为了递推公式。

非0下标的dp[j]应该是多少呢?

从递归公式dp[j] = min(dp[j - i * i] + 1, dp[j]);中可以看出每次dp[j]都要选最小的,所以非0下标的dp[j]一定要初始为最大值,这样dp[j]在递推的时候才不会被初始值覆盖。

  1. 确定遍历顺序
    我们知道这是完全背包,

如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。

在动态规划:322. 零钱兑换 (opens new window)中我们就深入探讨了这个问题,本题也是一样的,是求最小数!

所以本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!

  1. 举例推导dp数组
    已输入n为5例,dp状态图如下:
    在这里插入图片描述
class Solution:def numSquares(self, n: int) -> int:dp = [float('inf')] * (n + 1) # return dp[n]dp[0] = 0for i in range(n+1): # 注意需要dp[n],那么这里需要n+1j = 1while j ** 2 <= i:dp[i] = min(dp[i], dp[i - j ** 2] + 1)j += 1return dp[n]

时间复杂度:O(n)
空间复杂度:O(n)

解题思路二:0


时间复杂度:O(n)
空间复杂度:O(n)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

相关文章:

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】

LeetCode-279. 完全平方数【广度优先搜索 数学 动态规划】 题目描述&#xff1a;解题思路一&#xff1a;Python 动态规划五部曲&#xff08;完全平方数就是物品&#xff08;可以无限件使用&#xff09;&#xff0c;凑个正整数n就是背包&#xff0c;问凑满这个背包最少有多少物品…...

rust项目组织结构和集成测试举例

概述 在学习rust的过程中&#xff0c;当项目结构略微复杂的时候&#xff0c;写集成测试的时候发现总是不能引用项目中的代码&#xff0c;导致编写测试用例失败。查阅了教程&#xff0c;一般举例都很简单。查阅了谷歌和百度以及ai&#xff0c;也没有找到满意的答案。这里记录一…...

软件文档交付清单(直接套用合集)

软件文档交付清单是指在软件开发项目完成后&#xff0c;开发团队需要准备的一份详细清单&#xff0c;用于确保交付的软件产品符合客户需求并达到预期的质量标准。以下是软件文档交付清单中可能包含的一些关键要素 软件开发文档&#xff1a;这包括需求文档、设计文档、测试文档等…...

ModuleNotFoundError: No module named ‘ultralytics.utils‘

项目场景he 问题描述 提示&#xff1a;这里简述项目相关背景&#xff1a; model YOLO(modelr./yolov8m-cls.pt) 加载预训练模型时报错。 ModuleNotFoundError: No module named ultralytics.utils warning: bug: 原因分析&#xff1a; 很可能是提前下载的预训练模型出了…...

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024)

2024智能计算、大数据应用与信息科学国际会议(ICBDAIS2024) 会议简介 智能计算、大数据应用与信息科学之间存在相互依存、相互促进的关系。智能计算和大数据应用的发展离不开信息科学的支持和推动&#xff0c;而信息科学的发展又需要智能计算和大数据应用的不断拓展和应用。智…...

秋招复习笔记——八股文部分:操作系统

笔试得刷算法题&#xff0c;那面试就离不开八股文&#xff0c;所以特地对着小林coding的图解八股文系列记一下笔记。 这一篇笔记是图解系统的内容。 硬件结构 CPU执行程序 计算机基本结构为 5 个部分&#xff0c;分别是运算器、控制器、存储器、输入设备、输出设备&#xf…...

每日一题:C语言经典例题之杨辉三角

题目描述 输出杨辉三角形。 输入 第一行输入一个整数 n (1<n<10)。 输出 输出杨辉三角形的前n行&#xff0c;每个数字占8格左对齐。 样例输入 4 样例输出 1 1 1 1 2 1 1 3 3 1 代码&#xff1a; #inc…...

1. TypeScript: JavaScript 的超集,为大型应用而生

引言 在现代的前端开发领域&#xff0c;JavaScript 无疑是一门极其流行的语言。然而&#xff0c;随着前端项目的日益复杂&#xff0c;JavaScript 本身的一些特性使得维护和扩展大型代码库变得困难。这就是 TypeScript 应运而生的背景。TypeScript 是一种由微软开发的开源语言&…...

vex-table—— 获取插入或修改数据后的tableData

例子来自vxe-table。在开发过程中发现新增数据后&#xff0c;输出this.tableData&#xff0c;发现数据并没有被修改 想要获取更新的数据方式为 mounted () {const $table this.$refs.xTableconsole.log("&#x1f680; ~ mounted ~ $table:", $table.tableData)},...

通俗易懂地解释Go语言不同版本中垃圾回收机制的演进过程

完整课程请点击以下链接 Go 语言项目开发实战_Go_实战_项目开发_孔令飞_Commit 规范_最佳实践_企业应用代码-极客时间 Go 1.3时代 - 标记清除算法 这就像一个人要打扫房间,首先需要暂停其他活动。然后开始查看房间里的每件物品,对于自己仍需要使用的物品做上记号。查看完毕后…...

shamrockcms代码审计-啥也没有

shamrockcms 环境搭建 使用阿里源&#xff0c;创建数据库&#xff0c;运行shamrockcms.sql文件&#xff0c;将configure.properties中的jdbc修改为自己本地或者其他ip数据库连接&#xff0c;并且将ueditor.config.json中的master修改为localhost或者其他自己设置的ip 危险组件…...

【C++】排序算法 --快速排序与归并排序

目录 颜色分类&#xff08;数组分三块思想&#xff09;快速排序归并排序 颜色分类&#xff08;数组分三块思想&#xff09; 给定⼀个包含红⾊、⽩⾊和蓝⾊、共 n 个元素的数组 nums &#xff0c;原地对它们进⾏排序&#xff0c;使得相同颜⾊ 的元素相邻&#xff0c;并按照红⾊、…...

(Python)根据经纬度从数字高程模型(DEM)文件获取高度

基本介绍 在地理信息系统&#xff08;GIS&#xff09;和遥感中&#xff0c;数字高程模型&#xff08;Digital Elevation Model&#xff0c;简称DEM&#xff09;是一种表示 地表或地形高程信息的重要数据。DEM数据通常以栅格&#xff08;raster&#xff09;形式存在&#xff0…...

【WPF应用41】WPF中的Expander控件详解

Windows Presentation Foundation&#xff08;WPF&#xff09;中的Expander控件是一个用于显示详细信息的交互式UI元素。它允许用户通过点击标题来展开或折叠内容区域。Expander控件通常用于在界面上组织内容&#xff0c;提供一种可见/隐藏的功能&#xff0c;以帮助用户专注于当…...

golang变量初始化顺序

顺序&#xff1a; 1.引用的包 2.全局变量 3.init()函数 4.main()函数 package pkgimport "fmt"func init() {fmt.Println("pkg init") }package mainimport ("fmt"_ "gg/pkg" )var v val()func val() int {fmt.Println("func()…...

魔众 文库配置异步转换

同步转换 系统默认使用同步转换&#xff0c;即用户上传文档提交接口瞬间&#xff0c;系统会立即进行转换。 同步转换容易造成页面卡顿&#xff0c;转换时间超长的情况下&#xff0c;系统接口会超时。 异步转换 系统支持异步转换&#xff0c;即用户上传文档提交接口瞬间&…...

创建型模式--2.简单工厂模式【人造恶魔果实工厂1】

1. 工厂模式的特点 在海贼王中&#xff0c;作为原王下七武海之一的多弗朗明哥&#xff0c;可以说是新世界最大的流氓头子&#xff0c;拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介&#xff0c;控制着世界各地的诸多产业&#xff0c;人造恶魔果实工厂就…...

一些考研经验

前言 考研结束已有半个月&#xff0c;之前一直想写经验贴&#xff0c;奈何感觉自己本身就比较菜&#xff0c;考了两年才堪堪上岸&#xff0c;所以有些犹豫&#xff0c;拖拖沓沓到现在&#xff0c;思虑再三最终决定把自己对于考研的一些拙见记录一下&#xff0c;供各位参考。 …...

StockTrading AI小模型股票自动交易系统 转载

Stock-Trading StockTrading AI小模型股票自动交易系统 项目文档 Stock-Trading 语雀 项目展示 功能介绍 对接证券平台&#xff0c;实现股票自动化交易使用QuartZ定时任务调度&#xff0c;每日自动更新数据使用DL4J框架实现LSTM模型指导股票买入&#xff0c;采用T1短线交易策…...

01背包问题合集 蓝桥OJ

一、蓝桥OJ 1174小明的背包1 模板题 思路&#xff1a; 用二维数组dp判断最大价值&#xff0c;i表示物品数量&#xff0c;j表示物品体积&#xff0c;如果 j > V 则无需继续&#xff0c; j > w 物品还能再增加&#xff0c;同样价值也增加&#xff0c;否则继承之前的价值&am…...

ArcSWAT建模踩坑记:你的土壤数据库参数算对了吗?聊聊SPAW的那些默认值和单位陷阱

ArcSWAT土壤参数校准实战&#xff1a;避开SPAW计算中的5个致命误区 当水文模拟结果与实测数据出现系统性偏差时&#xff0c;经验丰富的建模者会首先检查土壤参数——这个隐藏在界面背后的"沉默变量"往往是误差的最大来源。SPAW作为ArcSWAT推荐的土壤参数计算工具&…...

告别ET1100?聊聊AX58100这颗高性价比EtherCAT从站芯片的升级体验

告别ET1100&#xff1f;AX58100高性价比EtherCAT从站芯片的工业升级实战 当工业设备制造商面临从传统控制架构向实时以太网迁移时&#xff0c;EtherCAT从站芯片的选型往往成为关键转折点。十年前&#xff0c;ET1100凭借其稳定的性能和相对友好的开发门槛&#xff0c;成为许多工…...

Windows Defender终极移除指南:高效卸载13项核心服务完整教程

Windows Defender终极移除指南&#xff1a;高效卸载13项核心服务完整教程 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirr…...

怎么判断一家工厂还在不在正常生产?6 类活跃度信号,从纸面到现场

跑工厂的销售员都遇到过这种事&#xff1a;手机里存着一份名单&#xff0c;导航开两小时&#xff0c;到门口才发现卷帘门焊死、车间长草、保安说"厂子去年就搬了"。 问题出在哪&#xff1f;大多数人判断"这家工厂在不在"&#xff0c;靠的是工商登记——执照…...

基于Claude API构建AI代码生成工具:从API封装到工程化实践

1. 项目概述与核心价值最近在开发者社区里&#xff0c;一个名为ashish200729/claude-code-source-code的项目标题引起了不小的讨论。乍一看&#xff0c;这个标题很容易让人产生误解&#xff0c;以为这是某个知名AI模型的源代码被公开了。但作为一名在软件开发和开源领域摸爬滚打…...

AI项目脚手架:标准化与自动化提升工程效率

1. 项目概述&#xff1a;一个为AI项目量身定制的“脚手架”如果你和我一样&#xff0c;在AI领域摸爬滚打多年&#xff0c;从早期的机器学习模型到现在的深度学习、大语言模型应用&#xff0c;肯定经历过无数次从零开始搭建项目的“阵痛”。每次新建一个项目&#xff0c;都要重复…...

基于Kubernetes Lease构建分布式部署锁:解决CI/CD环境下的资源竞争

1. 项目概述&#xff1a;从“clawfight”看一场被遗忘的社区技术博弈看到“2019-02-18/clawfight”这个标题&#xff0c;很多人的第一反应可能是困惑。它不像一个标准的软件项目名&#xff0c;没有清晰的版本号&#xff0c;也没有指明具体的技术栈。但恰恰是这种看似随意的命名…...

RTKLIB 2.4.3项目在Visual Studio 2019中的工程化配置:告别零散文件,打造清晰结构

RTKLIB 2.4.3项目在Visual Studio 2019中的工程化配置&#xff1a;告别零散文件&#xff0c;打造清晰结构 对于卫星导航领域的开发者而言&#xff0c;RTKLIB无疑是一个绕不开的开源项目。这个由日本学者Tomoji Takasu开发的GNSS定位软件&#xff0c;以其强大的功能和开放的架构…...

U64JSON编码技术解析与Iris框架性能优化

1. Iris框架与U64JSON编码技术解析 在嵌入式系统和高性能计算领域&#xff0c;数据交换效率直接影响整体系统性能。传统JSON虽然具有可读性好、跨平台等优势&#xff0c;但其文本特性带来的解析开销和带宽占用成为性能瓶颈。Arm Iris框架采用的U64JSON编码方案&#xff0c;通过…...

[具身智能-767]:AMCL全局撒粒子重搜与局部小范围匹配,是否算法过程是相似的,不同的是:粒子的数量、覆盖的区域、最终的精度?

AMCL 全局重搜 VS 局部匹配 详细对比核心定论二者底层算法流程、运算逻辑、执行步骤 100% 完全一致&#xff0c;统一遵循&#xff1a;运动预测→观测权重计算→粒子重采样→位姿融合输出这套粒子滤波逻辑&#xff0c;仅在粒子分布范围、粒子总数、收敛活动区间、定位误差精度四…...