您的位置:首页 > 编程语言 > Go语言

LeetCode "483. Smallest Good Base" !!

2017-01-31 07:35 330 查看
A more programming-like solution, is to hack the problem from simple: we try each possble base value, and see which 111..11 fits target number - using binary search.

class Solution(object):
def helper(self, num, p):
l = 1; r = int(pow(num, 1.0/p) + 1) # find highest possible bit
while(l < r):
mid = l + (r - l) // 2
sum = 0; cur = 1
# Addup to sum by form of 1111..11
for i in xrange(0, p + 1):
sum += cur
cur *= mid
# Good?
if sum == num:
return mid
elif sum > num:
r = mid
else:
l = mid + 1

return -1

def smallestGoodBase(self, N):
n = int(N)

# iterate each base, from longest 1s to shortest
for p in xrange(2, 101):
if (1 << p) < n:
k = self.helper(n, p)
if k != -1:
return str(int(k))

return str(n-1) # 11


However, as you expect, there's a smarter, math solution.

https://discuss.leetcode.com/topic/76368/python-solution-with-detailed-mathematical-explanation-and-derivation
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: