379 字
2 分钟
完全平方数
给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。
完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 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,把他当前值和新算出来的值作比较留下最小的 感觉这个很容易忘啊,要多看看