Leetcode 633. Sum of Square Numbers
Given a non-negative integer c, your task is to decide whether there’re two integers a and b such that aa + bb = c.
Example 1:
Input: 5
Output: True
Explanation: 1 * 1 + 2 * 2 = 5
Example 2:
Input: 3
Output: False
题目大意:
给定一个非负整数c,查找是否存在两个整数a和b使aa + bb = c。
解题思路:
对区间[0, c - aa]进行二分查找,查看是否存在完全平方数,若存在,则该数可以表示称bb的形式即为所求,要注意int溢出问题。时间复杂度O(根号c * logc).
代码:
class Solution {
public:
bool judgeSquareSum(int c) {
if(c == 0)
return true;
long long int a = 0;
while(a * a <= c)
{
long long int b = c - int(a * a);
long long int l = 1, r = b;
while(l <= r)
{
long long int mid = (r - l) / 2 + l;
if(mid * mid == b)
return true;
else if(mid * mid > b)
r = mid - 1;
else
l = mid + 1;
}
a++;
}
return false;
}
};
解题思路2:
给定c,枚举a,当a确定后,c - a * a唯一确定,只需要判断这个数是否为完全平方数即可。时间复杂度O(根号c).
代码:
class Solution {
public:
bool judgeSquareSum(int c) {
if(c == 0)
return true;
long long int a = 0;
while(a * a <= c)
{
int d = c - a * a;
int b = int(sqrt(d));
if(b * b == d)
return true;
a++;
}
return false;
}
};