0. 题目
把n分解为l个完全平方数之和,返回最小个数l。
1. 动态规划 o(n√n) o(n)
完全平方数v 去更新j>=v时的 dp数组
class Solution:
# 把n分解为l个完全平方数之和,返回最小个数l。
# 完全平方数:1、4、9、16
def numSquares(self, n):
m=int(math.sqrt(n))
# 1、2、...、m 组合成n的最小个数。
# 动态规划
dp = [0]+[float('inf')]*n
for i in range(1,m+1):
for j in range(pow(i,2),n+1): #完全平方数v 去更新j>=v时的 dp数组
dp[j]=min(dp[j-pow(i,2)]+1,dp[j])
return dp[-1]
2.
class Solution {