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. 平方数之和的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 633. 平方数之和双指针,指针遍历方向相反
leetcode 633. 平方数之和双指针,指针遍历方向相反