• [leetcode] 264. Ugly Number II (medium)


    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];
    }
    };
  • 相关阅读:
    mysql_fetch_array()和mysql_fetch_assoc()两个函数的区别
    在vmware workstation7上安装centos5.5的一些问题
    如何在CentOS下安装VMwareTools工具
    ResultSetMetaData类的介绍
    火狐快捷键
    ResultSetMetaData类的介绍
    jstl标签的使用
    e.printStackTrace()介绍
    mysql初学指南
    在SQL server中,怎么区别char跟varchar?
  • 原文地址:https://www.cnblogs.com/ruoh3kou/p/10007880.html
Copyright © 2020-2023  润新知