题目描述
给定一个非负整数 c
,你要判断是否存在两个整数 a
和 b
,使得 $a^2 + b^2 = c$。
样例
输入: 5
输出: True
解释: 1 * 1 + 2 * 2 = 5
输入: 3
输出: False
算法
(枚举) $O(\sqrt n)$
- 对
a
从 0 开始到 $\sqrt n$ 枚举,然后判断是否存在b
。
时间复杂度
- 最坏情况下需要枚举 $\sqrt n$ 个数字,故时间复杂度为 $O(\sqrt n)$。
C++ 代码
class Solution {
public:
bool judgeSquareSum(int c) {
for (int i = 0; (long long)(i) * i <= c; i++) {
int j = sqrt(c - i * i);
if (i * i + j * j == c)
return true;
}
return false;
}
};