625. Minimum Factorization

本文介绍了一个LeetCode题目:给定一个正整数a,找出最小的正整数b,使得b的每一位数字相乘等于a。若不存在这样的b或者b不在32位有符号整数范围内,则返回0。文章提供了一种高效解决方案,并分析了其时间复杂度。

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

SPEX is a software package for SParse EXact algebra Files and folders in this distribution: README.md this file build Contains the SPEX C library as well as the .so files DOC User guide for the SPEX software package MATLAB MATLAB interface for the SPEX software package SPEX_Backslash Exactly solve sparse linear systems with default settings. This is the easiest starting point for the SPEX software package. SPEX_Backslash will automatically determine the appropriate factorization algorithm for use in solving your problem A x = b (Developmental) SPEX_Cholesky Sparse integer-preserving SPEX_Cholesky factorization for exactly solving SPD linear systems (Developmental) SPEX_LU Sparse left-looking integer-preserving LU factorization for exactly solve sparse linear systems. (Release) SPEX_QR Sparse integer-preserving QR factorization (Developmental) SPEX_Update Sparse column replacement and rank 1 updates for the SPEX factorizations SPEX_UTIL Utility functions for all SPEX components Makefile compiles SPEX and its dependencies Dependencies: AMD approximate minimum degree ordering COLAMD column approximate minimum degree ordering SuiteSparse_config configuration for all of SuiteSparse GNU GMP GNU Multiple Precision Arithmetic Library for big integer operations. v6.1.2 or later is required. GNU MPFR GNU Multiple Precision Floating-Point Reliable Library for arbitrary precision floating point operations. v4.0.2 or later is required. Compilation options: SPEX_USE_PYTHON: If , build Python interface for SPEX. If : do not build the SPEX Python interface. Default: (defaults to ON).ONOFFSUITESPARSE_USE_PYTHON SPEX_USE_OPENMP: If , OpenMP is used in SPEX if it is available. Default: (defaults to ON).ONSUITESPARSE_USE_OPENMP To compile SPEX and its dependencies, just type "make" in this folder. This will also run a few short demos To install the package system-wide, copy the to /usr/local/lib, and copy to /usr/local/include.lib/*include/* Authors (alphabetical order): Jinhao Chen Timothy A. Davis Christopher Lourenco Lorena Mejia-Domenzain Erick Moreno-Centeno 翻译
最新发布
05-13
SPEX is a software package for SParse EXact algebra Files and folders in this distribution: README.md this file build Contains the SPEX C library as well as the .so files Doc User guide for the SPEX software package Demo demo programs for SPEX ExampleMats test matrices for demo programs Include the SPEX.h include file for user applications MATLAB MATLAB interface for the SPEX software package SPEX_Backslash Exactly solve sparse linear systems with default settings. This is the easiest starting point for the SPEX software package. SPEX_Backslash will automatically determine the appropriate factorization algorithm for use in solving your problem A x = b SPEX_Symmetric Sparse integer-preserving SPEX_Symmetric factorization for exactly solving SPD linear systems, or symmetric indefinite systems (with nonsingular minors) SPEX_LU Sparse left-looking integer-preserving LU factorization for exactly solve sparse linear systems. SPEX_QR Sparse integer-preserving QR factorization (FUTURE) SPEX_LU_ColRep Sparse column replacement for SPEX LU factorization SPEX_Symmetric_Rank1: rank 1 updates for the SPEX Cholesky and LDL factorizations SPEX_Utilities Utility functions for all SPEX components SPEX_Update_Utilities Utility functions for update/downdate methods Makefile compiles SPEX and its dependencies Python SPEX python interface Dependencies: AMD approximate minimum degree ordering COLAMD column approximate minimum degree ordering SuiteSparse_config configuration for all of SuiteSparse GNU GMP GNU Multiple Precision Arithmetic Library for big integer operations. v6.1.2 or later is required. GNU MPFR GNU Multiple Precision Floating-Point Reliable Library for arbitrary precision floating point operations. v4.0.2 or later is required. Compilation options: * `SPEX_USE_PYTHON`: If `ON`, build Python interface for SPEX. If `OFF`: do not build the SPEX Python interface. Default: `SUITESPARSE_USE_PYTHON` (defaults to ON). * `SPEX_USE_OPENMP`: If `ON`, OpenMP is used in SPEX if it is available. Default: `SUITESPARSE_USE_OPENMP` (defaults to ON). To compile SPEX and its dependencies, just type "make" in this folder. This will also run a few short demos. To install the package system-wide, do "sudo make install" Authors (alphabetical order): Jinhao Chen Timothy A. Davis Christopher Lourenco Lorena Mejia-Domenzain Erick Moreno-Centeno 翻译
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值