简介

对于困难的题目, 一般好像是不会一下子得出答案, 需要进行一定的数学分析, 然后才可以得出答案.
官房给出了数学的证明, 但是一般人数学早丢了, 还是二分法有用. 参考大神的,
思路简单来说就是, 知道范围,
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)
posted on 2021-06-18 11:05  HDU李少帅  阅读(72)  评论(0编辑  收藏  举报