379 字
2 分钟
完全平方数

279. 完全平方数

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

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

示例 1:

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

动态规划 我现在大概懂了 意思就是搞一个公式用前面那些答案表示后面的 依旧dp,先初始第一个 0就等于0因为分解不成完全平方数 然后找规律 10做例子 可以分解为 1的平方加上+9 dp就是1+dp9 2的平方+6 dp=1+dp6 3的平方+1 dp=1+dp1 发现规律 当前dp就是当前数减去一个比它小的完全平方数 然后剩下的数的dp再加一(这个多加的一就是这个比它小的完全平方数) 穷举完所有情况得到最小值就是dp 然后写代码

第一个问题就是每次外层循环开始要把dpi设置成无穷大,如果不设置无穷大 初始化的时候所有dp都是0 min只会取0

for i in range(1,i+1):
dp[i]=float('inf')
for j in range(1,int(n**0.5)+1):
dp[i]=min(dp[i],dp[i-j*j]+1)
min(dp[i],dp[i-j*j]+1)

这一段就是每次更新dpi,把他当前值和新算出来的值作比较留下最小的 感觉这个很容易忘啊,要多看看

完全平方数
https://overtone-zoean.vercel.app/posts/完全平方数/
作者
Zoean
发布于
2026-04-12
许可协议
CC BY-NC-SA 4.0