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;
    }
};

 

转载于:https://www.cnblogs.com/wdw828/p/7058217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值