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