lintcode-4.丑数

简介: lintcode-4.丑数

描述

如果一个数只有质数因子235 ,那么这个数是一个丑数。

前10个丑数分别为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12...设计一个算法,找出第N个丑数。

我们可以认为 1 也是一个丑数。

1≤n≤105

样例 1:

输入:

n = 9

输出:

10

解释:

[1,2,3,4,5,6,8,9,10,…],第9个丑数为10。

样例 2:

输入:

n = 1

输出:

1

挑战

要求时间复杂度为 O(nlogn) 或者 O(n)。

题解

思路

结论:当前丑数必定是之前某个丑数 的 2倍、3倍、或者 5倍。

定义一个数组result存放丑数,默认第一个丑数是1。那么当前丑数一定是result数组中在他之前的丑数的2,3,5倍中最小的一个,当然这个值一定是大于result[length-1]的最小值

result[1]=min(2result[0-length-1],3result[0-length-1],5*[0-length-1])

分别用2,3,5乘1寻找第二个丑数,得到最小值2作为第二个丑数即num[1]=2。

第三个丑数:

大于2且在21 31 51 22 32 52中的最小是==》3

4.以此类推找到第n个最小值为第n个丑数。

代码

const nthUglyNumber = function (n) {
var result = [1];
var i, t, nextchoushu;
while (result.length < n) {
    // 当前已经计算出来的丑数的最后一个
    t = result[result.length - 1];
    // 最后一个丑数*2
    nextchoushu = t * 2;
    // 遍历已经计算出来的丑数
    for (i = 0; i < result.length; i++) {
        // 
        if (result[i] * 2 > t) {
            nextchoushu = Math.min(result[i] * 2, nextchoushu);
        }
    }
    for (i = 0; i < result.length; i++) {
        if (result[i] * 3 > t) {
            nextchoushu = Math.min(result[i] * 3, nextchoushu);
        }
    }
    for (i = 0; i < result.length; i++) {
        if (result[i] * 5 > t) {
            nextchoushu = Math.min(result[i] * 5, nextchoushu);
        }
    }
    result.push(nextchoushu);
}
return result[n - 1];
}

相关文章
|
存储 容器
剑指offer 50. 丑数
剑指offer 50. 丑数
71 0
lintcode 415 有效回文串
用String下的spilt(regex)去除除英文外的符号,regex是正则表达式,[]内写要删除的符号,但返回值是一个String型数组。
|
算法
日拱算法:双指针解决三数、四数之和
本篇带来两道相似的、有递进关系的“双指针”算法题。 冲就完事了吼~~
|
算法 前端开发 程序员
「LeetCode」剑指Offer-49丑数
「LeetCode」剑指Offer-49丑数
117 0
「LeetCode」剑指Offer-49丑数
|
人工智能
LeetCode 训练场:454. 四数相加 II
LeetCode 训练场:454. 四数相加 II
97 0
|
机器学习/深度学习 存储 算法
LintCode 题解丨大厂面试题:N皇后问题
LintCode 题解丨大厂面试题:N皇后问题
LintCode 题解丨大厂面试题:N皇后问题
[剑指offer] 丑数
本文首发于我的个人博客:尾尾部落 题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。
817 0
|
Java
(1)剑指Offer之斐波那契数列问题和跳台阶问题
可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出。另外可以使用迭代法,用fn1和fn2保存计算过程中的结果,并复用起来。下面我会把两个方法示例代码都给出来并给出两个方法的运行时间对比。
1717 0

热门文章

最新文章

下一篇
开通oss服务