常规解法是dp,但是要几十毫秒,特殊解法利用了四平方和定理。
class Solution {
public:
int numSquares(int n) {
while (!(n & 3)) n >>= 2;
if (n % 8 == 7) return 4;
int i=1,j=sqrt(n);
if(j*j==n) return 1;
while(i<=j) {
int pr=i*i+j*j;
if(pr==n) return 2;
else if(pr>n) --j;
else ++i;
}
return 3;
}
};