腾讯面试题:最小分解
描述
给定一个正整数a,找到最小的正整数b,它的每个数字相乘之后等于a。
如果没有答案,或者答案超过了32位有符号整型的范围,返回0。
样例1
输入: 48
输出: 68
样例 2:
输入: 15
输出: 35
解题思路
用 2-9 对 a 因数分解, 如果无法分解说明无解, 比如说 a = 11.
为了使 b 尽可能小, 所以我们首选尽可能大的数字来分解 a, 即从9到2依次尝试, 尽可能多地提取每一个数字.
然后将分解的因数从小到大排列就可以组成答案 b, 在返回之前, 需要检查是否溢出/超过int范围.
以上算法中蕴含贪心的思想.
源代码
public class Solution {
/**
* @param a: a positive integer
* @return: the smallest positive integer whose multiplication of each digit equals to a
*/
public int smallestFactorization(int a) {
int res = 0;
for (int i = 9, base = 1; a != 1 && i != 1; i--) {
for (; a % i == 0; a /= i) {
res += base * i;
base *= 10;
}
}
if (res < 0 || a != 1) {
return 0;
}
return res;
}
}