Minimum Factorization

medium greedy math

Problem

Find the smallest positive integer whose digit-product equals n; return 0 if no such integer fits in 32 bits.

Inputn = 48
Output68
6 · 8 = 48.

def smallest_factorization(n):
    if n < 2: return n
    digits = []
    for d in range(9, 1, -1):
        while n % d == 0: digits.append(d); n //= d
    if n != 1: return 0
    digits.sort(); v = int(''.join(map(str, digits)))
    return v if v < 2**31 else 0
function smallestFactorization(n) {
  if (n < 2) return n;
  const digits = [];
  for (let d = 9; d > 1; d--) while (n % d === 0) { digits.push(d); n = n / d; }
  if (n !== 1) return 0;
  digits.sort(); const v = Number(digits.join(''));
  return v < 2**31 ? v : 0;
}
int smallestFactorization(int n) {
    if (n < 2) return n;
    List ds = new ArrayList<>();
    for (int d = 9; d > 1; d--) while (n % d == 0) { ds.add(d); n /= d; }
    if (n != 1) return 0;
    Collections.sort(ds);
    long v = 0; for (int d : ds) v = v * 10 + d;
    return v < (1L << 31) ? (int) v : 0;
}
int smallestFactorization(int n) {
    if (n < 2) return n;
    vector ds;
    for (int d = 9; d > 1; d--) while (n % d == 0) { ds.push_back(d); n /= d; }
    if (n != 1) return 0;
    sort(ds.begin(), ds.end());
    long long v = 0; for (int d : ds) v = v * 10 + d;
    return v < (1LL << 31) ? (int) v : 0;
}
Time: O(log n) Space: O(log n)