解法一:动态规划解法
动态方程为:
代码为:
class Solution:
def numSquares(self, n: int) -> int:
dp = [i for i in range(n+1)]
for i in range(2,n+1):
for j in range(1, int(i**(0.5))+1):
dp[i] = min(dp[i], dp[i - j*j] + 1)
return dp[-1]
解法二:图论DFS
将0到n每一个数看作是一个节点,如果任意两个数能够通过平方数加减得到,那么就连接两个节点:
那么问题就转化为了寻找从n到0的最短路径,通过dfs就可以得到