leetcode——第633题——平方数之和

题目:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,
使得 a2 + b2 = c 。

class Solution {
public:
    bool judgeSquareSum(int c) {
        // 1、为什么要用 long 型变量

        // // 法一:暴力枚举    运行报错
        // // 99999999 最后执行的输入,超出时间限制
        // for(int i=0; i<=sqrt(c); i++)
        // {
        //     for(int j=0; j<=sqrt(c); j++)
        //     {
        //         if(i * i + j * j == c)  return true;
        //        // else if(i * i + j * j < c)  continue;
        //     }
        // }
        // return false;

        // // 法二:使用 sqrt 函数
        // for(int i=0; i<=sqrt(c); i++)
        // {
        //     double res = sqrt(c-i*i);
        //     if(res == (int)res)
        //     {
        //         return true;
        //     }
        // }
        // return false;

        // 双指针法
        // 1、用 sqrt函数时,需要强制类型转换,(int)sqrt(c);
        // 2、两个指针的定义需要用 long 类型,用int类型就会报错了
        // 题中的范围是 [0,2的31次方] 因此用int 可能会报错
        // 因此在计算的过程中可能会发生int 型溢出的情况,需要使用 long 型避免溢出。
        long slow=0,fast=(int)sqrt(c);
        while(slow<=fast)
        {
            if((slow*slow+fast*fast)==c)    return true;
            else if((slow*slow+fast*fast)>c)    fast--;
            else    slow++;
        }
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值