给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 a2 + b2 = c。spa
示例1:指针
输入: 5code
输出: Trueblog
解释: 1 * 1 + 2 * 2 = 5class
示例2:循环
输入: 3di
输出: Falsewhile
利用双指针思想,左指针置0,右指针置目标值平方根向下取整。两指针平方和比较:co
若循环结束未找到平方和与目标值相同的状况,则不存在。 block
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; } }