625. 最小因式分解 🔒
题目描述
给定一个正整数 num
,找出最小的正整数 x
使得 x
的所有数位相乘恰好等于 num
。
如果不存在这样的结果或者结果不是 32 位有符号整数,返回 0
。
示例 1:
输入:num = 48 输出:68
示例 2:
输入:num = 15 输出:35
提示:
1 <= num <= 231 - 1
解法
方法一:贪心 + 因式分解
我们先判断 \(num\) 是否小于 \(2\),如果是,直接返回 \(num\)。然后从 \(9\) 开始,尽可能多地将数字分解为 \(9\),然后分解为 \(8\),以此类推,直到分解为 \(2\)。如果最后剩下的数字不是 \(1\),或者结果超过了 \(2^{31} - 1\),则返回 \(0\)。否则,我们返回结果。
注意,分解后的数字,应该依次填充到结果的个位、十位、百位、千位……上,因此我们需要维护一个变量 \(mul\),表示当前的位数。
时间复杂度 \(O(\log n)\),空间复杂度 \(O(1)\)。其中 \(n\) 为 \(num\) 的值。
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|