二分查詢
實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
白痴本人想出來的傻方法
無腦迴圈從1到x/2迴圈
class
solution
:def
mysqrt
(self, x:
int)
->
int:
if x==1:
return
1if x==0:
return
0for i in
range(1
,int
(x/2)+
1):if i*i>x:
return i-
1return i
將根號利用其它函式實現
class
solution
:def
mysqrt
(self, x:
int)
->
int:
if x==0:
return
0 num=exp(
0.5*log(x)
) num=
int(num)
#指數運算會存在誤差,因為計算機無法儲存浮點數,當 x = 2147395600正確結果是46340,而指數運算結果會是46339
#int()會向下取整,所以下一步要判斷
return num+1if
(num+1)
*(num+1)
<=x else num
class
solution
:def
mysqrt
(self, x:
int)
->
int:
l=0 r=x
n=0while l<=r :
m=int(l+
(r-l)/2
)if m*m<=x:
#如果中間值平方小於x,說明真實值在下半部分區間
n=m#直接用n=m可以得到結果就不用判斷
l=m+
1else
: r=m-
1return n
實際這個方法執行最快。而不是牛頓迭代哎
牛頓怎麼什麼都能做
從x開始每次向求解值更新靠近,直到兩次的更新值之間相差小於1e-7
class
solxiangution
:def
mysqrt
(self, x:
int)
->
int:
if x==0:
return
0 xi=x
while
true
: xii=
0.5*
(xi+x/xi)
if fabs(xii-xi)
<1e-
7:break
xi=xii
return
int(xii)
LeetCode 69 x 的平方根
實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。usr bin p...
Leetcode 69 x 的平方根
實現 int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 複製 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.複製 由於返回型別是整數,小數部分將被捨去。找...
leetcode69x 的平方根
69.x 的平方根 實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去...