每日题目LeetCode 633. 平方数之和 2024/11/4

给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c 。

示例 1:

输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

示例 2

输入:c = 3
输出:false

提示:

  • 0 <= c <= 2^31 - 1

题解:

        这种看上去简单的的题目,我就想先用暴力写一次,虽然知道肯定超时,但是万一呢。代码如下,甚至还是优化过一点点的,比如i*i <=c,但随着c数值增大还是超时了。

bool judgeSquareSum(int c) {
    for(long i = 0 ;i*i <= c ; i ++)
        for(long j = 0 ; j*j <= c; j ++)
            if (c == i * i + j * j)
                return true;
    
    return false;
}

        得动动脑子,想点别的办法。

        仔细思考,其实只需要一个循环,遍历一个数字从0到根号下c。另一个数字自然可以通过c与第一个数字的关系计算出来,如代码所示,少了一个循环,时间复杂度大大降低。还算是比较简单的题目,不过容易陷入暴力的误区。 

bool judgeSquareSum(int c) {
    for(long i = 0 ;i*i <= c ; i ++){
        double j = sqrt(c - i * i);
        if (j == (int)j)
            return true;
    }
    return false;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值