leetcode 483 最小好二進制

簡介

對於困難的題目, 一般好像是不會一下子得出答案, 需要進行一定的數學分析, 然後纔可以得出答案.
官房給出了數學的證明, 但是一般人數學早丟了, 還是二分法有用. 參考大神的,
思路簡單來說就是, 知道範圍,
i 個 mid 進制的1, 判斷是否相等. i = (1, 64)
mid 在 2 ~ 字符串長度進行二分.

參考鏈接

https://leetcode-cn.com/problems/smallest-good-base/solution/er-fen-jian-ji-ming-liao-bu-dong-lai-da-7p4vc/

code

class Solution:
    def smallestGoodBase(self, n: str) -> str:
        
        num = int(n)
        def check(x, m):
            ans = 0
            for _ in range(m+1):
                ans = ans*x + 1
            return ans
        ans = float("inf")
        for i in range(1, 64):
            l = 2
            r = num
            while l < r:
                mid = l + (r - l)//2
                tmp = check(mid, i)
                if tmp == num:
                    ans = min(ans, mid)
                    break
                elif tmp < num:
                    l = mid + 1
                else:
                    r = mid
                    
                
        return str(ans)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章