Perfect Squares
感觉这完全就是考数学定理,如果你记得四元平方和定理还有三元平方和定理,那么这道题就是一个简单的验证的题目,代码如下,解释了如何使用这两个定理解决这道题。
int numSquares(int n) {
//四元平方定理,就是任意一个数都可以拆成四个平方之和,所以这题的答案只有1,2,3,4
//三元平方和定理,就是只要一个数是这个形式就不能拆分为3个数的平方和
//4^k(8*m+7)
//一个数的平方和
int s = sqrt(n);
if(s*s==n)
return 1;
//2
for(int i=1;i<=s;++i){
for(int j=1;j<=n-i*i;++j){
if(n==j*j+i*i)
return 2;
}
}
//4^k(8m+7)
while(n%4==0){
n = n/4;
}
if(n%8==7)
return 4;
return 3;
}
可能还有其他方法可以不使用数学定理,希望能够留言提供,一起交流学习。