Leetcode 69 x 的平方根

2021-09-11 15:53:28 字數 1609 閱讀 9809

實現 int sqrt(int x) 函式。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

輸入: 4

輸出: 2

複製**

示例 2:

輸入: 8

輸出: 2

說明: 8 的平方根是 2.82842...,

複製**

由於返回型別是整數,小數部分將被捨去。

找到中間的數: mid = start + (end - start) / 2 而且: mid * mid <= x && (mid + 1) * (mid + 1) > x 但是這麼寫超出了integer的範圍了:

class solution 

return start;

}}複製**

所以改變一下: mid * mid <= x && (mid+1)(mid+1) > x 下面的code為ac版本:

class solution 

return start;

}}複製**

class solution:

def mysqrt(self, x):

start, end = 0, x

while start <= end:

# 結果都計算為整數

mid = start + (end - start) // 2

if mid * mid <= x < (mid + 1) * (mid + 1):

return mid

elif x < mid * mid:

end = mid

else:

start = mid + 1

複製**

基本思想:把非線性方程線性化,用線性方程的解逐步逼近原方程的解

求某個數(比如8)的平方根其實就是求解 f(x) = x^2 - 8 = 0 的解

如上圖點(x[k+1], 0)滿足該方程 0 = f(x[k]) + f'(x[k])(x[k+1] - x[k]) 得到牛頓迭代法的迭代公式:

x[k+1] = x[k] - f(x[k]) / f'(x[k])

回到求8的平方根

x[k+1] = x[k] - (x[k] - 8) / (2 * x[k]) = (x[k] + 8 / x[k]) / 2

就這樣一直逼近到x[k] * x[k] <= 8

class solution 

}複製**

class solution:

def mysqrt(self, x):

""" :type x: int

:rtype: int

"""if x == 0:

return 0

i = x

while int(i) > int(x / i):

i = (i + x / i) / 2

return int(i)

複製**

LeetCode 69 x 的平方根

實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。usr bin p...

leetcode69x 的平方根

69.x 的平方根 實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去...

LeetCode 69 x 的平方根

實現int sqrt int x 函式。計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4輸出 2示例 2 輸入 8輸出 2說明 8 的平方根是 2.82842.由於返回型別是整數,小數部分將被捨去。解題思路 簡單的做法是從...