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

力扣 完全平方数

一、题目回顾

给定一个正整数n,要求找到最少数量的完全平方数(如 1, 4, 9, 16, …),使它们的和等于n

示例

  • n = 12 → 4 + 4 + 4 → 3

  • n = 13 → 4 + 9 → 2

本质问题一句话总结:

把 n 拆成若干个完全平方数之和,要求个数最少


二、第一反应:这是一个“最少”问题

一看到「最少多少个」,而且允许重复使用数字,很容易联想到:

  • 背包问题

  • 动态规划

  • 状态转移

而这里的“物品”就是所有 ≤ n 的完全平方数。


三、状态设计(这是题目的核心)

1️⃣ 状态定义

设:

dp[i]表示组成数字 i 所需要的最少完全平方数个数

目标就是求dp[n]


2️⃣ 状态初始化

  • dp[0] = 0
    组成 0 不需要任何数(很重要的边界)

  • 其他dp[i]初始可以设成一个很大的值(表示“还没算出来”)


四、关键一步:状态转移怎么来?

思考方式(非常重要)

假设我们要算dp[i]

  • 如果最后一步用了一个平方数

  • 那么在此之前,已经凑出了i - k²

  • 所以:

dp[i] = dp[i - k^2] + 1

但问题是:

k 可以取多少?


只枚举到 √i(平方根技巧)

因为:

  • k² ≤ i

  • 所以 k ≤ √i

这一步非常关键,它直接决定了复杂度。

于是有:

dp[i] = min (dp[i - k^2] + 1)

class Solution { public: int numSquares(int n) { int dp[10001]; for (int i=1;i<=n;i++) { int num=(int)std::sqrt(i); int min=100000; for(int j=1;j<=num;j++) { if (dp[i-j*j]+1<min) min=dp[i-j*j]+1; } dp[i]=min; } return dp[n]; } };

五、算法流程总结(口语版)

  1. 从 1 一路算到 n

  2. 对于每个 i:

    • 枚举所有k² ≤ i

    • 尝试用作为最后一个数

    • 更新最小值

  3. 最终返回dp[n]

http://www.rkmt.cn/news/98546.html

相关文章:

  • 基于springboot和vue的城市公交管理系统的设计与实现_8f8dpq62(java毕业设计项目源码)
  • python3
  • Triton推理服务器部署微调后的模型及测试
  • 2025年成都靠谱的抖音代运营品牌哪家好,网站建设/网络公关/网络推广/新闻营销/抖音推广/抖音代运营品牌推荐排行榜 - 品牌推荐师
  • 云数据库服务(如AWS RDS)的优势和考虑因素?
  • 使用NeMo框架微调Llama 3.1 8B Instruct推理模型
  • 磁链观测器实战:从仿真到代码的闭环之旅
  • 墨迹蘑菇休闲小游戏Linux演示
  • JVM 之 内存溢出实战【OOM? SOF? 哪些区域会溢出?堆、虚拟机栈、元空间、直接内存溢出时各自的特点?以及什么情况会导致他们溢出?并模拟溢出】
  • vue基于Spring Boot框架学生健康饮食与运动管理系统_c3g9i4f9
  • 2026年最新教程!手把手教你用Python画一颗圣诞树(附源码)无需部署可直接运行!
  • 沉浸式LED显示屏LED电子屏多少钱
  • AI使用总结
  • 18、Debian 系统用户与认证管理全解析
  • 【设计模式|第四篇】适配器模式:让不兼容的接口协同工作
  • 线程是进程内的独立调度单位,是CPU调度的基本单元
  • 20、Debian系统管理:备份与设备管理全解析
  • QMS软件系统:质量成本直降40%,让质管变“智造“——全星质量管理QMS软件系统应用解析
  • 16、Debian内核:管理、特性与定制全解析
  • 探索四种商品售货机:MCGS 7.7 与三菱 PLC 联机之旅
  • 突破性多模态架构革命:Qwen3-VL-235B-A22B-Instruct-FP8重塑视觉语言交互边界
  • 医学影像深度学习知识点总结
  • 18、Linux 远程操作与文件搜索实用技巧
  • 缓存高可用架构-写缓存 - 实践
  • LIO-SAM性能实战评测:多传感器方案对比与场景适配深度解析
  • 经典Agent架构实战之工具使用 (Tool Use)
  • 多目标蜣螂优化算法NSDBO:微电网多目标优化调度的利器
  • 字符串移位包含问题与删除单词后缀问题
  • 【JavaWeb】HttpServletRequest_获取请求行和请求头
  • 剪映 6.0.1:免费解锁 VIP 功能,剪辑创作性价比之选