方法一:
暴力求解容易超时,此时的搜索过程自然采用二分查找
class Solution:
def isPerfectSquare(self, num: int) -> bool:
def myPerfect(left,right,num):
if left > right:
return False
mid = left + (right-left)//2
if (mid * mid) == num:
return True
elif (mid * mid) > num:
return myPerfect(left, mid-1,num)
elif (mid * mid) < num:
return myPerfect(mid+1, right,num)
# if num<=0:
# return False
# if num == 1:
# return True
return myPerfect(0,num,num)
方法二:
S=an+[(n-1)n/2]*2
=n^2+(a-1)n
所以若第一个奇数为1的话就一定是一个数的平方,否则不是.
利用数学性质,一个平方数以一定是从1开始的若干个奇数的和。
题目二
Implement int sqrt(int x).
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
class Solution:
def mySqrt(self, x: int) -> int:
def myPerfect(left,right,num):
if left > right:
return right
mid = left + (right-left)//2
if (mid * mid) == num:
return mid
elif (mid * mid) > num:
return myPerfect(left, mid-1,num)
elif (mid * mid) < num:
return myPerfect(mid+1, right,num)
return myPerfect(0,x,x)