Leetcode 2847
给定一个 正 整数 n,返回一个字符串,表示使其各位数字的乘积等于 n 的 最小正整数,如果不存在这样的数字,则返回 "-1" 。
示例 1:
输入:n = 105
输出:"357"
解释:3 * 5 * 7 = 105。可以证明,357 是各位数字的乘积等于 105 的最小数字。因此答案为 "357"。
示例 2:
输入:n = 7
输出:"7"
解释:由于 7 只有一位数字,其各位数字的乘积为 7。由于数字 1 到 6 的乘积分别为 1 到 6,所以答案为 "7"。可以证明 7 是乘积等于 7 的最小数字。
示例 3:
输入:n = 44
输出:"-1"
解释:可以证明,没有数字的各位数字乘积等于 44。因此答案为 "-1"。
提示:
1 <= n <= 10**18
又是一道小学数学题,一击必杀
# @param {Integer} n
# @return {String}
def smallest_number(n)
if n < 10
return n.to_s
end
@ans = []
@flag1 = true
@flag2 = true
cal(n)
unless @flag2
return "-1"
end
unless @flag1
return @ans.join.reverse
end
end
def cal(n)
while true
9.downto(2) do |i|
if n%i == 0
@ans << i.to_s
n = n/i
if n == 1
@flag1 = false
break
end
break
end
if i == 2 && n%i != 0
@flag2 = false
break
end
end
unless @flag1
break
end
unless @flag2
break
end
end
end