計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。
示例 1
——————————————————————————————————
輸入: 4
輸出: 2
——————————————————————————————————
示例 2
——————————————————————————————————
輸入: 8
輸出: 2
——————————————————————————————————
說明: 8 的平方根是 2.82842…, 由於返回型別是整數,小數部分將被捨去。
本題可用二分法求解,但與常規的二分法有細微不同,因為mid * mid要不斷向 x 逼近,而不是去和 x 相等,也就是找的右邊界。
因為 x 的平方根一定不會大於 x 的一半(除了1以外,注意本題不算小數部分),因此可令右指標 right = x // 2 + 1,加1即考慮了x為1的情況
mid = (left + right + 1) // 2,多加了1是為了避免死迴圈,比如x = 9時,如果沒有多加1,會在[3,4]區間內一直出不來
迴圈條件是left < right,沒有 「=」 號,因為兩者相等的時候就已經找到了我們想要的結果,不需要再迴圈了。如果有 「=」 號的話會陷入死迴圈的,比如x = 1時,最後left = right = 1,有 「=」 號的話就出不了迴圈了。
class
solution
:def
mysqrt
(self, x:
int)
->
int:
# 為了照顧到 0 把左邊界設定為 0
left =
0# 為了照顧到 1 把右邊界設定為 x // 2 + 1
right = x //2+
1while left < right:
# 注意:這裡一定取右中位數,如果取左中位數,**可能會進入死迴圈
# mid = left + (right - left + 1) // 2
mid =
(left + right +1)
>>
1 square = mid * mid
if square > x:
right = mid -
1else
: left = mid
# 因為一定存在,因此無需後處理
return left
時間複雜度:o(logn)
空間複雜度:o(1)
二分法做平方根
注意這裡的浮點數 不然的話程式會報錯 coding utf 8 二分法計算20的平方根 import math a 0.0 多次二分後會變成二分法,所以要設定成浮點數,python裡就是直接賦值成浮點數 b c float raw input enter a number n 100 while t...
二分法求平方根(Python實現)
使用二分法 bisection method 求平方根。1 defsqrtbi x,epsilon 2assert x 0,x must be non nagtive,not str x 3assert epsilon 0,epsilon must be postive,not str epsilo...
Python用二分法求平方根
好了,正如標題所示,我們今天要用二分法來求平方根。首先要有數字,但是老是有人寫字串該怎麼辦呢?老是有人在寫數學題的時候打字串 try x int input please enter a whole number to measure to square root except print 然後是重...