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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章