• 625. Minimum Factorization


    Problem statement

    Given a positive integer a, find the smallest positive integer b whose multiplication of each digit equals to a.

    If there is no answer or the answer is not fit in 32-bit signed integer, then return 0.

    Example 1
    Input:

    48 

    Output:

    68

    Example 2
    Input:

    15

    Output:

    35

    Solution

    This is the third problem for weekly contest 37. Initially, I thought it is a DFS problem. Actually, it is much easier. Although it is tagged with recursion in leetcode, I prefer it is a pure math.

    Since the input number should only contains the factors which are less than 10. We loop from 9 to 2, to divide the input number, until it is not divisible by any number in [2, 9].

    Suppose the input number is a, general idea is as following:

    • Loop i from 9 to 2.
    • In each loop, if a is divisible by i, update the min factorization value and a. Goes to next loop until a is not divisible by i
    • After exiting the loop,
      1. if a < 2, means all it`s factors are single digit number, return the value(if it is in the range),
      2. Otherwise, it means there is at least one factor, that is greater than 9, return 0. 

    Time complexity is O(8loga), space complexity is O(1).

    class Solution {
    public:
        int smallestFactorization(int a) {
            if(a < 2){
                return a;
            }
            long min_factorization = 0;
            long mul = 1;
            for(int i = 9; i >= 2; i--){
                while(a % i == 0){
                    min_factorization += mul * i;
                    mul *= 10;
                    a /= i;
                }
            }
            return (a < 2 && min_factorization < INT_MAX) ? min_factorization : 0;
        }
    };
  • 相关阅读:
    sem_timedwait
    netty
    嵌入式系统设计师
    新知识点
    20228
    20227
    mdbook
    optparse模块使用
    TiDB集群销毁删除
    configparser模块的使用
  • 原文地址:https://www.cnblogs.com/wdw828/p/7058217.html
Copyright © 2020-2023  润新知