题目:
Given a non-negative integer
c
, your task is to decide whether there’re two integersa
andb
such that a2 + b^2 ^= c.
Example 1:Input: 5 Output: True Explanation: 1 * 1 + 2 * 2 = 5
Example 2:
Input: 3 Output: False
解释:
判断一个数是否是两个平方数的和。
双指针法,left
从0 开始,right
从平方根开始,注意平方根之后的数字是不需要考虑的,因为平方根之后的数字平方以后的就已经比c
大了,更不可能和别人相加才等于c
。
python代码:
from math import sqrt
class Solution(object):
def judgeSquareSum(self, c):
"""
:type c: int
:rtype: bool
"""
left=0
right=int(sqrt(c))
while left<=right:
result=left*left+right*right
if result==c:
return True
else:
if result>c:
right-=1
else:
left+=1
return False
c++代码:
#include <math>
using namespace std;
class Solution {
public:
bool judgeSquareSum(int c) {
int left=0;
int right=(int) sqrt(c);
while (left<=right)
{
int tmp=left*left+right*right;
if (tmp==c)
return true;
else if(tmp>c)
right--;
else
left++;
}
return false;
}
};
总结:
对于一些乘法、除法或者平方的问题,要考虑是不是用开根号后之后可以减小范围但是也不会遗漏。
因为没要求非要是两个不同的数字,所以left<=right
。