lintcode 丑数

作者: yzawyx0220 | 来源:发表于2016-12-09 11:07 被阅读52次

设计一个算法,找出只含素因子2,3,5 的第 n 大的数。
直接寻找丑数,由定义可知,丑数是由2m,3n,5^l,因此不断寻找,将它们按从小到大的顺序排列,第n个即为结果。
首先定义一个vector(数组)存放结果,使数组的第一个数ugly[0]为1,然后从ugly[0]乘以2,ugly[0]乘以3,ugly[0]乘以5中选择最小的数为新的丑数,显然ugly[1]=2。然后再从ugly[1]乘以2,ugly[0]乘以3,ugly[0]乘以5中选择最小的数为下一个丑数,即ugly[2]=3。然后再从ugly[1]乘以2,ugly[1]乘以3,ugly[0]乘以5中选择最小的数,即ugly[3]=4。以此类推,得到最终结果。

class Solution {
public:
    /*
     * @param n an integer
     * @return the nth prime number as description.
     */
    int nthUglyNumber(int n) {
        // write your code here
        vector<int> ugly(n);
        int t2 = 0,t3 = 0, t5 = 0;
        ugly[0] = 1;
        for (int i = 1;i < n;i++) {
            ugly[i] = min(ugly[t2] * 2,min(ugly[t3] * 3,ugly[t5] * 5));
            if(ugly[i] == ugly[t2] * 2) t2++; 
            if(ugly[i] == ugly[t3] * 3) t3++;
            if(ugly[i] == ugly[t5] * 5) t5++;
        }
        return ugly.back();
    }    
};

相关文章

  • lintcode 丑数

    设计一个算法,找出只含素因子2,3,5 的第 n 大的数。直接寻找丑数,由定义可知,丑数是由2m,3n,5^l,因...

  • LintCode:517 · 丑数

    问题描述 写一个程序来检测一个整数是不是丑数。丑数的定义是,只包含质因子 2, 3, 5 的正整数。比如 6, 8...

  • 4. 丑数(lintcode)

    因为丑数只含素因子2,3,5。所以 任一丑数 = 2或3或5 * 更小的丑数(因为丑数素因子只由2 3 5组成,所...

  • LintCode:4 · 丑数 II

    问题描述 如果一个数只有质数因子2,3,5 ,那么这个数是一个丑数。前10个丑数分别为 1, 2, 3, 4, 5...

  • LintCode 4. 丑数 II

    原题 解 第一步,万年不变的查错。如果给的n是小于1,那么这个就没什么意义了,return 0。 这道题,找只含有...

  • LintCode 4. 丑数 II

    题目描述 设计一个算法,找出只含素因子2,3,5的第n小的数。 符合条件的数如:1, 2, 3, 4, 5, 6,...

  • 263、丑数(E)

    判断一个正整数是否为一个丑数。丑数的定义是 1 为丑数,只包含 2、3、5的数就是丑数,比如 4,8,但是14 就...

  • golang实现剑指offer:动态规划题型

    丑数 LeetCode 面试题49:丑数 题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Nu...

  • 第 n 个丑数 (lintcode:ugly-number-ii

    设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8,...

  • 剑指offer学习笔记:5.3 时间效率与空间效率的平衡

    面试题34:丑数我们把只包含因子2,3,5的数称为丑数。求按从小到大排列的第1500个丑数。例如,6,8都是丑数,...

网友评论

    本文标题:lintcode 丑数

    本文链接:https://www.haomeiwen.com/subject/xvsemttx.html