剑指 Offer 49. 丑数

剑指 Offer 49. 丑数

我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

 

示例:

输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。

说明:  

  1. 1 是丑数。
  2. n 不超过1690。

 

解析:

2的次方,3的次方,5的次方,组合即可

然后放到set里,再遍历

很少,不会超时,只需要注意越界即可

复制代码
class Solution {
public:
    set<long long> ss;
    int nthUglyNumber(int n) {
        vector<long long> nums[3];
        const unsigned long long maxn = 2147483647;
        long long a = 1, b = 1, c = 1;
        nums[0].push_back(1);
        nums[1].push_back(1);
        nums[2].push_back(1);
        for(int i = 1; i < 31; i++)
        {
            if(a * 2 <= maxn)
            {
                a *= 2;
                nums[0].push_back(a);
            }
            if(b * 3 <= maxn)
            {
                b *= 3;
                nums[1].push_back(b);
            }
            if(c * 5 <= maxn)
            {
                c *= 5;
                nums[2].push_back(c);
            }
        }
        for(int i = 0; i < nums[0].size(); i++)
        {
            long long a = nums[0][i];
            for(int j = 0; j < nums[1].size(); j++)
            {
                long long b = nums[1][j];
                for(int k = 0; k < nums[2].size(); k++)
                {
                    long long c = nums[2][k];


                    if((unsigned long long)(a * b) <= maxn && (unsigned long long)(a * c) <= maxn && (unsigned long long)(b * c) <= maxn && (unsigned long long)(a * b * c) <= maxn)
                    {
                        ss.insert(a * b * c);
                    }

                }
            }
        }
        ss.insert(1);
        int m = 0;
        long long ret;
        for(set<long long>::iterator it = ss.begin(); it != ss.end(); it++)
        {
            m++;
            if(m == n)
            {
                ret = *it;
                break;
            }


        }
        return ret;





    }
};
复制代码

 

posted @   WTSRUVF  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2021-07-22 手写数字识别多层网络
2019-07-22 图论题思考过程
2019-07-22 Java容器部分用法
2019-07-22 数论知识简易总结
2018-07-22 Race to 1 UVA - 11762 (记忆dp概率)
2018-07-22 Expect the Expected UVA - 11427(概率dp)
2018-07-22 Tribles UVA - 11021(全概率推论)
点击右上角即可分享
微信分享提示