---
# System prepended metadata

title: 633. Sum of Square Numbers

---

# 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;
    }
};
```