您的位置:首页 > 其它

leetcode 264 丑数2

2020-01-14 09:17 99 查看

丑数进阶版 !到底是第几个丑?

此题是在原来丑数的基础上
寻找第几个丑数

失败尝试

想直接判断打表
1690内的所有丑数
果不其然 超时福利放送

一个个判断不行
那就需要寻找 数据规律

观察可得
丑数的基础上乘 2, 3, 5 仍然是丑数 – 简化判断

所以丑数可以由以下列表组成

2 1* 2 2 * 2 3 * 2 4 * 2
3 1* 3 2 * 3 3 * 3 4 * 3
5 1* 2 2 * 2 3 * 2 4 * 2

做法:

  • 维护三个list – ugly2, ugly3, ugly5
    分别储存** now* 2, now* 3, now*5**
  • 取三个list 开头的 最小值 – 第 cnt 个丑数 (相当于是对丑数的排序过程)
  • 直到 cnt 到达 n 为止 – 即取第n个丑数

代码如下:

class Solution {
public:
int nthUglyNumber(int n) {
list<long long> ugly2;
list<long long> ugly3;
list<long long> ugly5;
long long now = 1;
int cnt = 1;
while (cnt != n) {
ugly2.push_back(now * 2);
ugly3.push_back(now * 3);
ugly5.push_back(now * 5);

long long min2 = ugly2.front();
long long min3 = ugly3.front();
long long min5 = ugly5.front();

long long MIN = min(min2, min(min3, min5));
if (min2 == MIN) ugly2.pop_front();
if (min3 == MIN) ugly3.pop_front();
if (min5 == MIN) ugly5.pop_front();
now = MIN;
cnt++;
}
return now;
}
};
  • 点赞
  • 收藏
  • 分享
  • 文章举报
Luyoom 发布了14 篇原创文章 · 获赞 0 · 访问量 116 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: