首页 > 代码库 > LeetCode "483. Smallest Good Base" !!

LeetCode "483. Smallest Good Base" !!

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

LeetCode "483. Smallest Good Base" !!