633. 平方数之和

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了633. 平方数之和相关的知识,希望对你有一定的参考价值。

给定一个非负整数 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

解题思路

使用双指标遍历的方法实现。由于题目给的是非负整数。所以先要判断此数。这里我们需要设定一个遍历值得大小,取这个整数的算术平方根。还需要将算术平方根取整。同样取两个变量。i初值为0,j初值为非负整数的算术平方根。判定i的平方与j的平方和是否为非负整数,是则返回true。不是则判断是大于还是小于。如果c>ii+jj。说明j的取值大了,则将j–;同样的道理将i++;

class Solution {
    public boolean judgeSquareSum(int c) {
        long left = 0, right = (long)Math.sqrt(c);
        if(c<0){
            return false;
        }
        while(left<=right){
            if (c == left*left + right*right){
                return true;
            }else if(c > left*left + right*right){
                left++;
            }else{
                right--;
            }
        }
        return false;
    }
}

这里前几次没有通过,左右指针取的是int,本题 cc 的取值范围在 [0,231-1],因此在计算的过程中可能会发生 int 型溢出的情况,需要使用 long 型避免溢出。

以上是关于633. 平方数之和的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode633题平方数之和

633. 平方数之和

leetcode 633. 平方数之和双指针,指针遍历方向相反

leetcode 633. 平方数之和双指针,指针遍历方向相反

leetcode 633. 平方数之和双指针,指针遍历方向相反

leetcode 633. 平方数之和双指针,指针遍历方向相反