题目描述:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
解题思路:动态规划,只是转移的状态从固定的变为小于等于当前值的所有平方数,代码如下:
class Solution:
def numSquares(self, n: int) -> int:
dp = [float('inf')] * (n+1)
dp[0] = 0
for i in range(1, n+1):
j= 1
while(j*j <= i):
dp[i] = min(dp[i], dp[i-j*j]+1)
j += 1
return dp[n]