简介
对于困难的题目, 一般好像是不会一下子得出答案, 需要进行一定的数学分析, 然后才可以得出答案.
官房给出了数学的证明, 但是一般人数学早丢了, 还是二分法有用. 参考大神的,
思路简单来说就是, 知道范围,
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)
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》