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

 

相关文章:

  • 2022-02-20
  • 2021-11-07
  • 2021-10-26
  • 2022-12-23
  • 2021-06-11
  • 2021-12-02
  • 2022-12-23
猜你喜欢
  • 2021-12-03
  • 2021-09-29
  • 2021-08-17
  • 2021-05-05
  • 2021-09-22
  • 2022-12-23
  • 2021-09-18
相关资源
相似解决方案