题目描述
给定一个非负整数 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;} };