给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c。
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
class Solution {
public static boolean judgeSquareSum(int c) {
int i = 0, j = (int) Math.sqrt(c);
while(i <= j){
int powSum = i * i + j * j;
if(powSum == c)
return true;
else if(powSum < c)
i++;
else
j--;
}
return false;
}
}
算法流程:
双指针思想,使用 1-取整的根号c 和 取整的根号c-1 两个指针,若两指针指向的元素平方和等于 c ,则返回 true ,否则返回 false 。
Tips:
- 第三行,使 j 的值为取整的根号c,缩减循环次数。
- 第四行,不能是 i<j, 例如 c=4, i=j=2,会直接返回 false 导致错误。
- 第六行,要先判断”平方和等于c” 这种情况,例如 c=5, i=1, j=2, 直接就符合要求了,若先判断其他情况会导致更改 i和j 的值,造成错误。