1. 程式人生 > 其它 >Leetcode每日一題2021/01/10

Leetcode每日一題2021/01/10

技術標籤:Leecodeleetcodepython演算法

【每日一題】Leetcode:69.x的平方根
實現 int sqrt(int x) 函式。
計算並返回 x 的平方根,其中 x 是非負整數。
由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。

  • 示例 1:
輸入: 4
輸出: 2
  • 示例 2:
輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842..., 
     由於返回型別是整數,小數部分將被捨去。
  • 我的思路:
    1
    程式碼:
class Solution:
    def mySqrt(self, x: int) -> int:
        left,
right = 0, x mid = 0 while(left <= right): mid = left + (right - left)//2 if(mid**2 > x): right = mid - 1 elif(mid**2 < x): left = mid + 1 else: return mid return right

2
3

  • 優化
    牛頓迭代法公式如下:
    5
    對於本題可化為以下形式:
    已知:
    6
    化簡:
    7
    程式碼:
class Solution(object):
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        y = long(x)
        while(y * y > x):
            y = (y + x / y) / 2
        return int(y)

8
9

  • 總結:
    使用二分法,若是數字型別資料要保證區間是單調的

    至於牛頓迭代法,就是迭代的方法來求解函式方程的根,牛頓法就是不斷求取切線的過程,數值分析這門課學過,只瞭解一點皮毛