Leetcode每日一題2021/01/10
阿新 • • 發佈:2021-01-12
【每日一題】Leetcode:69.x的平方根
實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
- 示例 1:
輸入: 4
輸出: 2
- 示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842...,
由於返回型別是整數,小數部分將被捨去。
- 我的思路:
程式碼:
class Solution:
def mySqrt(self, x: int) -> int:
left, right = 0, x
mid = 0
while(left <= right):
mid = left + (right - left)//2
if(mid**2 > x):
right = mid - 1
elif(mid**2 < x):
left = mid + 1
else:
return mid
return right
- 優化
對於本題可化為以下形式:
已知:
化簡:
程式碼:
class Solution(object):
def mySqrt(self, x):
"""
:type x: int
:rtype: int
"""
y = long(x)
while(y * y > x):
y = (y + x / y) / 2
return int(y)
- 總結:
使用二分法,若是數字型別資料要保證區間是單調的
至於牛頓迭代法,就是迭代的方法來求解函式方程的根,牛頓法就是不斷求取切線的過程,數值分析這門課學過,只瞭解一點皮毛