可以用四平方和定理:任意一个正整数都可以表示为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或2return !!a + !!b ; //!逻辑取反,若a不为0则!a为0,!!a为1, }return 3;} };