题目描述
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。
示例
- 示例 1:
输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5
- 示例 2:
输入:c = 3
输出:false
提示
- 0 <= c <= 231 - 1
解题思路
- 使用双指针:
- 先确定左右起点,左边为 0,当左边为 0 时,且 c 符合题目描述,则右边起点为 c 2 \sqrt[2]{c} 2c;
- 开始循环判断。
代码
class Solution {
public:
bool judgeSquareSum(int c) {
int64_t left = 0; // 左边界
int64_t right = sqrt(c); // 右边界
int64_t res = 0; // 暂存两数平方的和
while(1){
if(left > right){ // 循环退出条件
return false;
}
res = left * left + right * right;
if(res > c){
right--;
}else if(res < c){
left++;
}else{
return true;
}
}
return false;
}
};
提交结果
总结
- 双指针。