Leetcode——x的平方根
阿新 • • 發佈:2018-12-30
實現 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