LeetCode-633.判断一个数是否是两个数的平方和
描述
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c。
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
思路
与TwoSum那道题一个思路。还是使用双指针,此题可以看成“在0-c的有序数组中,是否可以找到两个数,使他们的平方和等于c?”不过为了优化,我们需要限定尾指针的初始值。
实际上,尾指针无需从c开始,因为c的平方必然大于c,所以我们可以从c的开方开始。然后就是双指针那一套。
class Solution {
public boolean judgeSquareSum(int c) {
//将问题分解到从0-s的平方和的twoSum问题,s是为了优化得到的c的开方
int s=(int)Math.sqrt(c);
int l=0;
while(l<=s)
{
int sum=l*l+s*s;
if(sum==c) return true;
else if(sum>c) s--;
else l++;
}
return false;
}
}