633. 平方数之和

一、题目:633. 平方数之和

图片.png

二、代码和思路:

方法一:使用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;
    }
};

喜欢这种题目,可以一题多解,不同的解之间有一点难度区分。

怕什么真理无穷们,进一步有进一步的欢喜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甜橙の学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值