633. 平方数之和
思路1:暴力遍历(不详述了)
思路2:双指针
题目给的c的范围很大0 <= c <= 2^31 - 1,小心超界
这个AC不了,直接报错了,没有剪枝,也没有考虑数据越界的问题
class Solution {
public:
bool judgeSquareSum(int c) {
int left = 0, right = c;
while (left <= right)
{
int num = left * left + right * right;
if (num > c)right--;
if (num == c)return true;
if (num < c)left++;
}
return false;
}
};
注意剪枝
其中注意数据类型为long才能过,否则会越界
class Solution {
public:
bool judgeSquareSum(int c) {
if (c < 0)return false;
long left = 0, right = (long)sqrt(c);
while (left <= right)
{
long num = left * left + right * right;
if (num > c)right--;
if (num == c)return true;
if (num < c)left++;
}
return false;
}
};