code:
func numSquares(n int) int {
if n <= 0 {
return 0
}
//refer to Lagrange's Four-square Theorem, thk for Euler
//if n % 4 == 0 then it can be divide by 4
for 0 == n & 0x3 {
n >>= 2
}
//if n % 8 == 7 then it must be four, because 7 == 1 + 1 + 1 + 4
if 7 == n & 0x7 {
return 4
}
for i, j, square := 0, 0, 0; square <= n; {
j = int(math.Sqrt(float64(n - square)))
if j * j + square == n {
if 0 == i {
return 1
} else {
return 2
}//if 0 == i
}//if j * j + square == n
i++
square = i * i
}//for i, j, square := 0, 0, 0; square <= n;
return 3
}//func numSquares(n int) int
result:
personal opinion:
operator “!” must be applied to value that type is bool in golang, bad news, so sad. I want to use it in a integer but fail.