题目:
给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c。
示例1:
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
示例2:
输入: 3
输出: False
思路:
利用双指针思想,左指针置0,右指针置目标值平方根向下取整。两指针平方和比较:
- 小于目标值,右指针左移;
- 大于目标值,左指针右移;
- 等于目标值,判断结束
若循环结束未找到平方和与目标值相同的情况,则不存在。
代码:
public class P633 { public boolean judgeSquareSum(int c) { if (c < 0) { return false; } int left = 0; int right = (int) Math.sqrt(c); int curSum; while (left < right) { curSum = left * left + right * right; if (curSum > c) { right--; } else if (curSum < c) { left++; } else { return true; } } return false; }}