# 633. Sum of Square Numbers
## Description
Given a non-negative integer c, decide whether there're two integers a and b such that a2 + b2 = c.
## Examples
### Example 1:
>Input: c = 5
Output: true
Explanation: 1 * 1 + 2 * 2 = 5
### Example 2:
>Input: c = 3
Output: false
## Constraints:
>0 <= c <= 231 - 1
## C++
由於是兩個 int 去查找是否符合目標。所以先建立一個 vector 存放所有平方 $0^2+1^2+2^2+...+n^2$,然後迴圈遍歷這個 vector 去判斷 `c - vector[i]` 是否為整數。
```cpp
class Solution {
public:
bool isSRT(double value) {
double root = sqrt(value);
return floor(root) == root;
}
bool judgeSquareSum(int c) {
unsigned int tmp = sqrt(c);
vector<unsigned int> nums(tmp + 1);
for (int i = 0; i <= tmp; i++) {
nums[i] = i * i;
}
for (int i = 0; i <= tmp; i++) {
if (isSRT(c - nums[i])) {
return true;
}
}
return false;
}
};
```
這方法相對較慢也需要很多空間,使用 left, right 去查找,其他人的方法:
```cpp
class Solution {
public:
bool judgeSquareSum(int c) {
long long left = 0, right = sqrt(c);
while (left <= right) {
const long long sum = left * left + right * right;
if (sum == c)
return true;
if (sum > c)
--right;
else
++left;
}
return false;
}
};
```