633. Sum of Square Numbers
Problem
Given a non-negative integer c, decide whether there're two integers a and b such that a2 + b2 = c.
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
Intuition
- Tương tự như bài
2sum. Mình xema^2 + b^2 = cnhư làx + y = cthì đây chính là dạng bài của 2 sum - Để ý constraint của bài thì nên xài
longthay chointđể tránh trường hợp bịoverflow
Approach
- Dùng 2 con trỏ left
l, và con trỏ rightr. - Trỏ
ltiến từ trái sang phải, trỏrtiến từ phải sang trái - Ta có:
s = l*l + r*r- Nếu
s = c=> return true vì tồn tại(l, r)thoả mãnl*l + r*r = c - Nếu
s > c=> giảm giá trị con trỏ right 1 đơn vịr--để làm giảm giá trị của tổng bình phươngs - Nếu
s < c=> tăng giá trị con trỏ left 1 đơn vịl++để làm tăng giá trị của tổng bình phươngs
- Nếu
Implementation
class Solution {
public boolean judgeSquareSum(int c) {
long n = (long)Math.sqrt(c);
if (n * n == c) return true;
long l = 1; long r = n;
while (l <= r) {
long s = l*l + r*r;
if (s == c) return true;
if (s > c) {
r--;
} else {
l++;
}
}
return false;
}
}