可以用四平方和定理:任意一個正整數都可以表示為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;} };
?