Skip to content

483. Smallest Good Base

Description

Given an integer n represented as a string, return the smallest good base of n.

We call k >= 2 a good base of n, if all digits of n base k are 1's.

 

Example 1:

Input: n = "13"
Output: "3"
Explanation: 13 base 3 is 111.

Example 2:

Input: n = "4681"
Output: "8"
Explanation: 4681 base 8 is 11111.

Example 3:

Input: n = "1000000000000000000"
Output: "999999999999999999"
Explanation: 1000000000000000000 base 999999999999999999 is 11.

 

Constraints:

  • n is an integer in the range [3, 1018].
  • n does not contain any leading zeros.

 

Solutions

Solution: Math

  • Time complexity: O(log2n)
  • Space complexity: O(1)

 

JavaScript

js
/**
 * @param {string} n
 * @return {string}
 */
const smallestGoodBase = function (n) {
  const num = BigInt(n);
  const maxLogarithm = Math.floor(Math.log2(n));

  for (let logarithm = maxLogarithm; logarithm >= 2; logarithm--) {
    const base = BigInt(Math.floor(Math.pow(n, 1 / logarithm)));
    let current = (sum = BigInt(1));

    for (let index = 0; index < logarithm; index++) {
      current *= base;
      sum += current;
    }
    if (sum === num) return `${base}`;
  }
  return `${num - 1n}`;
};

Released under the MIT license