题目:给定一个正整数num,如果num是一个完全平方数,返回True,否则返回False
法1:观察到完全平方数1,4,9,16都是奇数的累加,比如1=1,4=1+3,9=1+3+5,16=1+3+5+7等等
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
tmpsum=0
i=0
while tmpsum<=num:
if tmpsum==num:return True
tmpsum+=2*i+1
i+=1
return False
法2:用二分求出num对应的开方数,类似于leetcode69,sqrt(x),最后判断得到的 开方数**2==num
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
if num==0 or num==1:return True
left,right=0,num
while left<right:
mid=left+(right-left)//2
tmp=mid**2
if tmp==num:return True
elif tmp<num:left=mid+1
else:right=mid
return (right-1)**2==num