1. 程式人生 > >Leetcode——x的平方根

Leetcode——x的平方根

實現 int sqrt(int x) 函式。

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

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

示例 1:

輸入: 4
輸出: 2
示例 2:

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回型別是整數,小數部分將被捨去。

思路:
典型的二分法問題,while迴圈比較目標值與中間值平方的關係,所以可以:

class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """
        if x == 0:
            return 0
        left = 1
        right = x // 2 + 1
        ###注意這裡是要求整形,所以要用整除符號//
        while left <= right:
            mid = left + (right - left) // 2
            sq = x // mid
            if sq > mid:
                left = mid + 1
            elif sq < mid:
                right = mid -1
            else:
                return mid
        return right

時間複雜度是logN,或者下面程式碼,剛好反過來,其實還是二分法,時間會比較長

class Solution:
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int
        """

        left,right = 0,x
        while left <= right:
            mid = left + (right - left) // 2
            if mid**2 > x:
                right = mid - 1
            else:
                left = mid + 1
         return left - 1