打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
LeetCode 633.平方数之和

LeetCode 633.平方数之和题目链接:

https://leetcode-cn.com/problems/sum-of-square-numbers/

题目描述:

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

示例 1:

输入:c = 5

输出:true

解释:1 * 1 + 2 * 2 = 5

示例 2:

输入:c = 3

输出:false

示例 3:

输入:c = 4

输出:true

示例 4:

输入:c = 2

输出:true

示例 5:

输入:c = 1

输出:true

提示:

0 <= c <= 231 - 1

题目分析:

看到此题,我们还是不禁会想到使用双指针进行求解。首先分析一下这两个数a,b要在什么范围内才有可能符合条件a2+ b2 = c?这两个数都可以为任意非负整数,假设一个数a取值为0,那我们就只需考虑 b2 = c,b的取值最大只能是根号c,通过分析我们可以得到两个数应该取的初始值,即一个数初始化为0,另一个数初始化为根号c。我们假定a小于等于b,计算a2+ b2 的值,并与目标值c进行比较,如果刚好相等,则符合题意返回true即可。但当和小于目标值c,说明和过小,我们需要适当增加两个数中的某个数,使其和增大,如果选择右值,则会增加过大,所以我们应该选择对左值进行增加。反过来如果和小于目标值c,我们同样应该选择对右值进行修改,使右值减小。

题解:

执行用时: 4 ms

内存消耗: 35.1 MB

class Solution {    public boolean judgeSquareSum(int c) {        // 定义左右元素的值        long l = 0, r = (long)Math.sqrt(c);        // 当左元素小于等于右元素时执行循环        while (l <= r) {            // 计算两数平方之和            long sum = l * l + r * r;            // 如果和刚好与目标值相等,则返回true            if (sum == c)                return true;            // 如果和小于目标值,说明左值过小,需要加大            if (sum < c)                ++l;            // 如果和大于目标值,说明右值过大,需要减小            if (sum > c)                --r;        }        // 如果左值大于右值,说明没有找到符合条件的数,返回false        return false;    }}

题目来源:力扣(LeetCode)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
LeetCode 633. 平方数之和
leetcode 数组 (python)
LeetCode刷题实战9:求解回文数
技术图文:排序技术在求解算法题中的应用
leetcode - 除数博弈
彩票克星-万能公式脚本实战示例第3讲-杀红公式验证
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服