LeetCode 633 平方数之和(多解题)
LeetCode 633 平方数之和
题目描述:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。
逆向双指针逼近
对于给定的整数target,可能存在的两个整数a、b均不可能大于floor(sqrt(c)), 因此在[0, floor(sqrt(c))]范围内寻找
执行用时:8 ms, 在所有 Java 提交中击败了11.74%的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了40.08%的用户
class Solution {
public boolean judgeSquareSum(int c) {
/*先对C进行开方并向下取整*/
int n = (int)(Math.floor(Math.sqrt(c*1.0)));
int a = 0, b = n;
/*逆向双指针逼近*/
while(a <= b) {
double currSum = Math.pow(a,2) + Math.pow(b,2);
if(Math.abs(currSum-c)<1e-6) {
return true;
}
else if(currSum > c) {
b--;
}
else {
a++;
}
}
return false;
}
}