题解
思路
代码
class Solution:
### 0127 动态规划(4640 ms,14.9 MB)
def numSquares(self, n: int) -> int:
# 对于每一个n,凑成n我们仅需要的最大的完全平方数不会超过n本身
squares = [i ** 2 for i in range(0, int(math.sqrt(n))+1)]
# dp[i]表示数i需要的最少完全平方数的个数,初始化为无穷大
dp = [float('inf')] * (n + 1)
dp[0] = 0 # 初始化数0需要0个完全平方数
for i in range(1, n+1):
for square in squares:
# 若当前数i小于此时的完全平方数,则停止循环
if i < square:
break
# dp[i] or i去掉square之后加上一个数
dp[i] = min(dp[i], dp[i-square] + 1)
return dp[-1]