力扣随笔之平方数之和(中等633)

文章讲述了两种方法解决Java中的整数平方和问题:暴力枚举结合求平方根,以及利用双指针策略。暴力枚举减少了部分计算,而双指针则通过动态调整a和b来寻找满足条件的整数对。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路1:暴力解法,在枚举a的同时根据求平方根方法sqrt求出b,若b是整数则返回ture,若不为整数,则继续枚举a;

注:暴力枚举也可以减少一些枚举的次数,a枚举a的范围为 a^2 < sqrt(c)

Java实现:

class Solution {
    public boolean judgeSquareSum(int c) {
        for(long a = 0;a * a <= c;a++){
            double b = Math.sqrt(c - a * a);//根据整数a和整数c求出b
            if(b == (int)b){//若b为整数则返回true
                return true;
            }
        }
        return false;
    }
}

思路二:根据双指针来解,设定a <= b <= sqrt(c)

        若 a^2 + b^2 == c    则return true;

        若 a^2 + b^2 < c      则a++;

        若 a^2 + b^2 > c      则b--;

class Solution {
    public boolean judgeSquareSum(int c) {
        long a = 0;//左指针
        long b = (long)Math.sqrt(c);//右指针
        while(a <= b){
            int sum = a * a + b * b
            if(sum == c){
                return true;
            }else if(sum < c){
                a++;
            }else {
                b--;
            }
        }
        return false;
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值