題目:
給定一個非負整數
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;
}
}