題目描述
給定一個非負整數?c
?,你要判斷是否存在兩個整數?a
?和?b
,使得?a^2?+ b^2 = c
?。
示例 1:
輸入:c = 5 輸出:true 解釋:1 * 1 + 2 * 2 = 5
示例 2:
輸入:c = 3 輸出:false
提示:
0 <= c <= 2^31 - 1
解決方案:
1、數據大小范圍:long long,(int 的極限是2^32 -1)
2、平方數就先取該數的算術平方根,分別討論邊界條件
3、算術平方根即是邊界極值,另一值從0或1 開始,根據符合條件的大小比較,去壓縮中間區域:即極值的左移或右移。
函數源碼:
class Solution { public:bool judgeSquareSum(int c) {long long a=1;long long b=sqrt(c);double x=sqrt(c);if(x==b) return true;while(true){if(a>b) return false;if(a*a+b*b==c) break;else if(a*a+b*b>c) b--;else a++;}return true;} };