實現 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.由於返回型別是整數,小數部分將被捨去。解題思路 簡單的做法是從...