题目描述:
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
注意:不要使用任何内置的库函数,如 sqrt
。
示例 1:
输入: 16 输出: True
示例 2:
输入: 14 输出: False
代码如下:
class Solution:
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
i=1;
ans=set()
while i<=num:
i=int((i+num/i)/2)
if i in ans:
return False
ans.add(i)
if i**2==num:
return True
return False
此问题采用牛顿迭代法,算法过程:
0.对给定正实数x和允许误差e,令变量y取任意正实数值,如令y=x;
1.如果y*y与x足够接近,即|y*y-x|<e,计算结束并把y作为结果;
2.取z=(y+x/y)/2;
3.将z作为y的新值,回到步骤1.
注意,在此问题中,在牛顿迭代法中,会逐步逼近所求平方根,如不判断是否重复,程序将不断循环,例如,输入5,i=2将会一直循环下去。