现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 ... ...)之乘积等于n,若不存在则输出 -1。
输入例子1:
36
输出例子1:
49
输入例子2:
100
输出例子2:
455
思路:
贪心算法, 从低位开始, 把 n 与(9,8,7...2)的数进行除, 得到的数作为该位的数字, 然后修改n(比如之前与a整除,那么就改成n = n //a )
比如 36
先来得到个位, 9, 8, 7,....2 尝试看哪个数字能够和36整除, 发现 9 能够整除, 因此个位是 9, 同时n还剩下 36/9 = 4
4 也是从 9, 8, 7,....2 尝试看哪个数字能够和4整除, 发现是4, 最后4 / 4 = 1, 此时递归终止。
再看100 如何得到445
n = 100 , 从9开始一直到2, 100能够与5整除, 因此个位数是5, 此时 n = 100 / 5 = 20 这时候的数字是 5
n = 20, 同上, n 能够与 5 整除, 所以十位数是 5, 此时 n= 20/5 = 4 , 这时候的数字是45
n = 4, 同上做法, 发现 4 能够与4 整除, 所以百位数是4, 此时n = 4/4 = 1, 不必做下去了。 这时候的数字是 455
即是最终结果
Python代码
class Solution:
def __init__(self):
# res是最终的结果串
self.res = ""
# 表示能否有这样的数字满足要求
self.isExist = 1
def solve(self, n):
if n == 1:
return None
a = 9
while a >= 2: # 尝试该位能够填哪个数字
if n % a == 0: # 该位可以用 a 来填
self.res = str(a) + self.res
n = n // a
self.solve(n) # 递归求高位
return None
else:
a -= 1
if a == 1:
self.isExist = -1
return None
def solution(self, n):
# write code here
if n == 1:
return -1
self.solve(n)
if self.isExist == -1:
return -1
if int(self.res) <= 9:
return -1
return int(self.res)