https://leetcode-cn.com/problems/sum-of-square-numbers/
c^2 = a^2 + b^2 (不妨設(shè)a < b)
運(yùn)用了Math的sqrt函數(shù)求出與目標(biāo)值最接近的b
然后把a(bǔ) 從0到b 開始設(shè)置雙指針來遍歷
有一個要注意的點(diǎn)就是這里的a可以等于b,和昨天那個題不同蝇更,那個是數(shù)組中的不同元素比較恃逻,所以才不相等,這個能否相等的問題也需要多注意下。
找的這個問題的原因其實(shí)是因?yàn)樘峤诲e了...
看到實(shí)際用例是2 然后返回的是false饭宾,因?yàn)楫?dāng)時想法其實(shí)是覺得平方了再取整數(shù)部分的話,再次平方的話惭适,剩下的部分應(yīng)該沒有之前的部分大了科阎,沒有把兩個相等的平方和考慮進(jìn)去,需要之后注意一下細(xì)節(jié)方面
class solution{
public boolean judgeSquareNumber(int c){
//因?yàn)橐玫狡椒胶退憔模晕覀儜?yīng)該要把不符合的情況排除
if( c < 0) return false;
int i = 0;
int j = (int) Math.sqrt(c);
while( i <= j){
int temp = i*i + j*j;
if(temp == c) return true;
else if(temp < c) i++;
else j--;
}
return false;
}
看官方的題解還有下面幾種方法
使用了費(fèi)馬定理:一個非負(fù)整數(shù) C 能夠表示為兩個整數(shù)的平方和扼劈,當(dāng)且僅當(dāng)C 的所有形如 4k+3 的質(zhì)因子的冪次均為偶數(shù)。
使用了sqrt公式菲驴,這個和雙指針的方法不一樣荐吵,是遍歷每個可以存在的a,找出是不是有這樣的一個b滿足a^2 +b^2 = C
class solution{
public boolean judgeSquareNumber{
for(long a = 0; a * a <= c; a++){
double b = Math.sqrt(c - a*a);
if(b == (int) b) return true;
}
return false;
}
}