📅  最后修改于: 2023-12-03 14:59:02.838000             🧑  作者: Mango
这个问题可以理解为“116的平方根是多少的整数部分?”。
我们可以从1开始枚举每个正整数,直到找到一个数的平方大于等于116。那么,这个数减1就是116的整数部分平方根了。
import math
def int_sqrt(n: int) -> int:
i = 1
while i * i <= n:
i += 1
return i - 1
answer = int_sqrt(116)
print(answer) # 输出 10
这种方法的时间复杂度为O(√n),当n很大时效率较低。
对于一个非负数n,它的平方根一定在[0, n]范围内。我们可以利用二分查找的思想,在这个范围内搜索答案。
def int_sqrt(n: int) -> int:
l, r = 0, n
while l <= r:
mid = (l + r) // 2
if mid * mid <= n < (mid + 1) * (mid + 1):
return mid
elif n < mid * mid:
r = mid - 1
else:
l = mid + 1
answer = int_sqrt(116)
print(answer) # 输出 10
这种方法的时间复杂度为O(logn),效率较高。