Javascript-625-最小因式分解——腾讯面试题库
2021-02-20 12:17
标签:http 方法 fun 空间复杂度 表示 搜索 leetcode 头部 之间 出题指数(最大5):? 给定一个正整数 如果不存在这样的结果或者结果不是 32 位有符号整数,返回 0。 样例 1 输入: 输出: 样例 2 输入: 输出: LeetCode原题目指路 提示: “不存在这样的结果”有一种情况是:给定的整数含有大于10的质数因数,不要忘了判断 我们可以从最低位数字(个位数字)开始枚举答案,尽量把小的数位上的数字放得越大越好。 所以我们从最低位开始枚举,并一直放 9 直到 a 不能被 9 整除,即 a 能表示成 a = a0 * 9^t 且 t 尽量大。接下来,我们一直放 8 直到 a0 不能被 8 整除,一直放 7 直到 a0 不能被 7 整除,以此类推。这种贪心方法和深度优先搜索的策略本质上是一样的,只不过直接找出了最终答案,避免了不必要的搜索。 复杂度分析 时间复杂度:O(log a),将一个数进行因式分解后,它最多可以表示成 O(log a)个数的乘积。 空间复杂度:O(1)。 最近在面前端的实习工作,js系统学习了一下,然后果断python转js。js还是香啊,各路转换函数一应俱全。 用到的转换函数: 存储结果从个位开始依次从数组头部加进来——unshift() 将数组去掉各元素之间的逗号,转为字符串——join() 字符串转为数字——Number() Javascript-625-最小因式分解——腾讯面试题库 标签:http 方法 fun 空间复杂度 表示 搜索 leetcode 头部 之间 原文地址:https://www.cnblogs.com/zhoujiayingvana/p/12681761.html题目
a
,找出最小的正整数 b
使得 b
的所有数位相乘恰好等于 a
。48
68
15
35
题解
Javascript实现
/**
* @param {number} a
* @return {number}
*/
var smallestFactorization = function (a) {
result = [];
// 10以下的直接返回本身
if (a 2 ** 31) {
return 0;
}
let k = 9;
while (a > 1 && k > 1) {
if (a % k === 0) {
a = a / k;
result.unshift(k);
// k = 9; k不需要重置为9,因为每次都是贪心策略,大于当前k的值已经无法被a整除
continue;
}
else {
k--;
}
}
result = Number(result.join(‘‘));
// 判断因式是否有大于10的质数
if (result > 2 ** 31 || a >= 10) return 0;
return result;
};
console.log(smallestFactorization(22));
console.log(smallestFactorization(15));
做题心得
下一篇:JavaScript this
文章标题:Javascript-625-最小因式分解——腾讯面试题库
文章链接:http://soscw.com/index.php/essay/57966.html