一、题目:633. 平方数之和
二、代码和思路:
方法一:使用sqrt()函数,从0直到这个数的平方大于c,用c值减去i的平方,比较double和int形数值是否一致。
class Solution {
public:
bool judgeSquareSum(int c) {
for(long i=0;i*i<=c;i++){
if(sqrt(c-i*i)==int(sqrt(c-i*i)))
return true;
}
return false;
}
};
方法二:双指针:
1、左指针l设为0,右指针r设置为跟好C向下取值(Int即可),
2、左指针的平方加上右指针的平方和c比较
3、如果相等,返回true;如果这平方的和小于C,左指针加一,否则右指针加一,继续循环直到两个指针相遇。
4、如果结束循环,还没有返回值,说明并不存在这一的两个整数,返回false;
ps:需要注意的是:因为0 <= c <= 231 - 1,当左右指针较大时,会产生大于int的情况,所以我们在一开始就对这些值采取long形赋值。
class Solution {
public:
bool judgeSquareSum(int c) {
long r=int(sqrt(c)),l=0;
while(l <= r){
if(l*l+r*r==c)
return true;
else if(l*l+r*r<c)
l++;
else
r--;
}
return false;
}
};
喜欢这种题目,可以一题多解,不同的解之间有一点难度区分。
怕什么真理无穷们,进一步有进一步的欢喜!