# 完全平方数 (Perfect Squares) ## 题目描述 给你一个整数 n,返回和为 n 的完全平方数的最少数量。 ## 解题思路 ### 动态规划 dp[i] = min(dp[i - j*j] + 1) for all j where j*j <= i ## Go 代码 ```go func numSquares(n int) int { dp := make([]int, n+1) for i := range dp { dp[i] = math.MaxInt32 } dp[0] = 0 for i := 1; i <= n; i++ { for j := 1; j*j <= i; j++ { if dp[i-j*j]+1 < dp[i] { dp[i] = dp[i-j*j] + 1 } } } return dp[n] } ``` **复杂度:** O(n√n) 时间,O(n) 空间