Given a positive integer num, write a function which returns True if num is a perfect square else False.
Note: Do not use any built-in library function such as sqrt.
Example 1:
Input: 16
Returns: True
Example 2:
Input: 14
Returns: False
思路
有两种方法:
1、利用完全平方数的性质
一个完全平方数可以分解为1 + 3 + 5 + 7 + …
因为:
等式左边 | 等式右边 |
---|---|
x^2 - (x - 1)^2 | 2*(x - 1) + 1 |
(x - 1)^2 - (x - 2)^2 | 2*(x - 2) + 1 |
…… | …… |
2^2 - 1^2 | 2*1 + 1 |
1^2 - 0 | 1 |
sum = x^2 | sum = 1+3+5+……+2(x-1) |
2、利用牛顿迭代法
公式如下:
x=x+num/x2
具体推导过程可以参考 这里
代码(方法1:C语言)
bool isPerfectSquare(int num)
{
int x = 1;
while (num > 0)
{
num -= x;
x += 2;
}
return num == 0;
}
代码(方法2:python代码)
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
x = num
while x*x > num:
x = (x + num/x) / 2
return x*x == num