leetcode 279 四平方定理

可以用四平方和定理:任意一个正整数都可以表示为4个以内整数的平方和。

如果一个数含有因子4,那么我们可以把4都去掉,并不影响结果。比如:8去掉4,12去掉3,返回的结果都相同。

如果一个数除以8余7,那肯定是由4个完全平方数组成的。

!的意思是逻辑取反,则一个不为0的是取反为0,再取反为1,所以若a和b都不为0,则 !!a+!!b 的值为2,如果有一个为0,则返回1。

返回4,2,1的情况都讨论了之后,就剩下返回3的情况了;否则返回3。

class Solution {
public:
    int numSquares(int n) {
        while(n%4 == 0) n/=4;
        if(n%8 == 7) return 4;
        for(int a =0; a*a<=n; a++){
            int b = sqrt(n- a*a);
            if(a*a + b*b == n)
                //return 1或2
                return !!a + !!b ; //!逻辑取反,若a不为0则!a为0,!!a为1,
        }
        return 3;
    }
};
原文地址:https://www.cnblogs.com/Bella2017/p/11070437.html