码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode] 264. Ugly Number II (medium)

时间:2018-11-23 16:09:32      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:ati   color   超时   min   number   BMI   vector   etc   mission   

263. Ugly Number的子母题

题目要求输出从1开始数,第n个ugly number是什么并且输出。

一开始想着1遍历到n直接判断,超时了。

class Solution
{
public:
  bool isUgly(int num)
  {
    while (num % 5 == 0 && num > 4)
      num /= 5;
    while (num % 3 == 0 && num > 2)
      num /= 3;
    while (num % 2 == 0 && num > 1)
      num /= 2;
    return num == 1;
  }
  int nthUglyNumber(int n)
  {
    int res = 1;
    vector<int> sta;
    sta.push_back(res);
    while (sta.size() <= n)
    {
      ++res;
      if (isUgly(res))
        sta.push_back(res);
      else
      {
        while (!isUgly(res))
        {
          ++res;
        }
        sta.push_back(res);
      }
    }
    for (auto a : sta)
    {
      cout << a;
    }
    return sta[n];
  }
};

 

超时以后想通过数组保存ugly数字,然后对其排序,直接输出第n个ugly数字。

这里有点投机取巧的意思。利用static去保存,这样在不同数据测试中,只需要第一次计算保存数据,后面只需要执行返回static里面的值就好了,所以评测结果非常快。

Runtime: 4 ms, faster than 97.70% of C++ online submissions for Ugly Number II.

 

class Solution
{
public:
  int nthUglyNumber(int n)
  {
    static vector<int> uglyNums;
    long long a, b, c, maxN = INT_MAX;
    if (uglyNums.empty())
    {
      for (a = 1; a < maxN; a *= 2)
        for (b = a; b < maxN; b *= 3)
          for (c = b; c < maxN; c *= 5)
            uglyNums.push_back(c);
      sort(begin(uglyNums), end(uglyNums));
    }
    return uglyNums[n - 1];
  }
};

 

 

最优解里看到的,也是讨论区里面用的最多的一种方法,0ms。

 

class Solution
{
public:
int nthUglyNumber(int n) {
    static vector<int> ugly {1};
    static int last(1);
    static int c2=2, c3=3, c5=5;
    static int i2=0, i3=0, i5=0;
    while (ugly.size() < n) {
        while (c2 <= last) c2 = 2 * ugly[++i2];
        while (c3 <= last) c3 = 3 * ugly[++i3];
        while (c5 <= last) c5 = 5 * ugly[++i5];
        ugly.push_back(last = min(c2, min(c3, c5)));
    }
    return ugly[n-1];
}
};

 

[leetcode] 264. Ugly Number II (medium)

标签:ati   color   超时   min   number   BMI   vector   etc   mission   

原文地址:https://www.cnblogs.com/ruoh3kou/p/10007880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!