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]
- }
|