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