給定一個 正整數(shù) num ,編寫一個函數(shù),如果 num 是一個完全平方數(shù),則返回 true ,否則返回 false 。
進階:不要使用任何內置的庫函數(shù),如 sqrt 。
# 官方解答
class Solution:
def isPerfectSquare(self, num: int) -> bool:
left, right = 0, num
while left <= right: # 左指針小于等于右指針
mid = (left + right) // 2
square = mid * mid
if square < num:
left = mid + 1 #已經比較過mid*mid和num之間的大小關系了,因此從mid+1開始
elif square > num:
right = mid - 1 #已經比較過mid*mid和num的大小關系,right從mid-1開始
else:
return True
return False
if __name__ == '__main__':
num = 1
print(Solution.isPerfectSquare(Solution, num))
# 我的題解
class Solution:
def isPerfectSquare(self, num: int) -> bool:
if num == 1:
return True
ans = False
low, high = 0, num
while high > low: # 不嚴謹,low = high時,也可以
mid = int((high+low)/2)
if mid*mid > num:
high = mid # mid都比較過了,不應該再放在可選區(qū)間!
elif mid*mid < num:
low = mid
else:
ans = True
break
if mid == int((high+low)/2):
break
return ans