| 12345678910111213141516171819 | 
							- func numSquares(n int) int {
 
- 	dp := make([]int, n+1)
 
- 	dp[0] = 1000000
 
- 	for i := 1; i < n+1; i *= 2 {
 
- 		copy(dp[i:], dp[:i])
 
- 	}
 
- 	for i := 1; i*i <= n; i++ {
 
- 		dp[i*i] = 1
 
- 	}
 
- 	for i := 1; i < n; i++ { // n(k) = n(i + j*j) = n(i) + 1
 
- 		for j := 1; i+j*j <= n; j++ {
 
- 			if dp[i]+1 < dp[i+j*j] {
 
- 				dp[i+j*j] = dp[i] + 1
 
- 			}
 
- 		}
 
- 	}
 
- 	return dp[n]
 
- }
 
 
  |