题目描述
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 $a^2+b^2$ = c
样例
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
算法1
(双指针) $O(n)$
接167题,也是双指针的模板题,条件是平方和相同,改变判断移动的条件即可,
遇到的坑点:
首先平方和等于c,a,b都不可能大于$sqrt(c)$ ,因此上边界可以定义位c的开根号再转换为整数,
其次,a,b的数值是可以相同的,因此i,j不再是模板的i<j,而是i<=j;
还有,$a^2+b^2$仍然可能超出int的范围,因此i,j最好一开始就定义为int
C++ 代码
class Solution {
public:
bool judgeSquareSum(int c) {
bool res = false;
for(long i=0,j=sqrt(c);i<=j;i++){
while(i*i+j*j>c) j--;
if(i*i+j*j==c) {
res = true;
return res;
}
}
return res;
}
};