【LeetCode】二分搜索刷題【持續更新】

本人使用環境Python3+Pycharm。最近恢復刷題,持續更新,能點讚的點點贊,抱拳了。想要啥題號自己搜一下沒有去我別的文章中搜,我目前的規劃就是先刷數論,邊刷編寫哈~(我是刷完了但是寫文章花時間呀,不要噴我噻)
目前涉及的題目編號:69
找題就複製這個,親測好用:【你要查找的題號】
【69】x的平方根
題目要求:計算並返回 x 的平方根,其中 x 是非負整數。由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
題目分析:題目太簡單了沒有什麼值得寫的。我工程代碼出身,我第一反應就是如下的代碼:

    def mySqrt(self, x: int) -> int:
        return round(math.floor(math.sqrt(x)))

但是這個題的本意肯定不是這樣的哈,下面用的是袖珍計算器算法,什麼是袖珍計算器算法,其實實質上就是根號不好表達,將其換成指數和對數的形式,代碼如下:

    def mySqrt(self, x: int) -> int:
        if x < 2 :
            return x
        left = int(e**(0.5*log(x)))
        right = left + 1
        if right * right > x:
            return left
        else:
            return right

此題還可以用二分法的思想去搞它,代碼如下:

    def mySqrt(self, x: int) -> int:
        if x <= 2:
            return x
        left, right = 2, x // 2
        while left <= right:
            guess_digit = left + (right - left) // 2
            num = guess_digit ** 2
            if num > x:
                right = guess_digit -1
            elif num < x:
                left = guess_digit
            else:
                return guess_digit
        return right
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章