題目描述:
給定一個非負整數 c ,你要判斷是否存在兩個整數 a 和 b,使得 a2 + b2 = c。
示例1:
輸入: 5
輸出: True
解釋: 1 * 1 + 2 * 2 = 5
示例2:
輸入: 3
輸出: False
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/sum-of-square-numbers
解法:
class Solution {
public boolean judgeSquareSum(int c) {
int lo = 0;
int hi = (int)Math.sqrt(c);
while(lo<=hi){
int key =lo*lo+hi*hi;
if(lo>hi) return false;
else if(key<c) lo++;
else if(key>c) hi--;
else return true;
}
return false;
}
}
思路概述:
使用二分查找,左邊界是0,右邊界根号c,使key值來接收平方和。key比c大了,則使右邊界減一,key比c小了,則使右邊界加一。如果最後直到左邊界大于右邊界了還沒有找到與c相等的key值,則代表c不是平方數之和。