69. x的平方根
阿新 • • 發佈:2018-11-22
Problem
實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1:
輸入: 4
輸出: 2
示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回型別是整數,小數部分將被捨去。
too young 思路
我能想到的就是遍歷了,平方不超過的最大整數。。
倒是跑通了
輸入:2147395599
報錯:MemoryError
dalao思路-40ms
二分查詢 binary search
class Solution(object):
def mySqrt(self, x):
if x == 0:
return 0
left = 0
right = x
while True:
mid = left + (right-left)/2
if (mid * mid > x):
right = mid - 1
else:
if (mid+1) * (mid+ 1) > x:
return mid
left = mid + 1
巨佬預警-28ms
利用了牛頓迭代法,看了很久終於看懂了
參考教程:https://matongxue.com/madocs/205.html
推導如下
class Solution(object):
def mySqrt(self, x):
r = x
while r * r > x:
r = (r + x/r)/2
return r