尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

力扣 完全平方数

力扣 完全平方数
📅 发布时间:2026/6/21 18:31:33

一、题目回顾

给定一个正整数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]:

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

  • 那么在此之前,已经凑出了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

    • 尝试用k²作为最后一个数

    • 更新最小值

  3. 最终返回dp[n]

相关新闻

  • 基于springboot和vue的城市公交管理系统的设计与实现_8f8dpq62(java毕业设计项目源码)
  • python3
  • Triton推理服务器部署微调后的模型及测试

最新新闻

  • D-ULTRA-CSA算法:如何用站点级延迟捷径加速多模态行程规划
  • GOPATH不是过时配置,而是Go工程演进的底层基石
  • Java堆内存与栈内存的本质差异与协同故障排查
  • 2026年最新通化市黄金回收白银回收铂金回收彩金回收靠谱门店TOP5权威榜单+实体老店联系方式 - 亦辰小黄鸭
  • 从Overleaf部署到密码安全:Docker环境下的bcrypt哈希与MongoDB实践
  • Terraform变量依赖与条件逻辑:构建可演进的基础设施程序

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号