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
题目大意是:求给出的一个数的平方根,如果没有就返回false,有就返回true
第一个解法就是采用循环解决(效率先不考虑,首先解决问题)
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
if num<0:
return False
i=0
while(i<=num):
if (i*i==num):
return True
elif i*i>num:
return False
i+=1
return False
进一步就考虑提高效率的问题了,从代码可以看出,相当于从0开始循环,依次验证是否和num值匹配
根据这个问题,我们完全没必要依次取i值+1;可以以二分法来取i值,这样可以减少取i的次数,进而提高代码的效率
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
if num<0:
return False
left,right=0,num
i=0
while left<=right:
i=(left+right) / 2
if i*i>num:
right=i-1
elif i*i<num:
left=i+1
else:
return True
return False