• LeetCode 264. Ugly Number II


    264. Ugly Number II(丑数 II)

    链接

    https://leetcode-cn.com/problems/ugly-number-ii

    题目

    编写一个程序,找出第 n 个丑数。

    丑数就是只包含质因数 2, 3, 5 的正整数。

    示例:

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

    1 是丑数。
    n 不超过1690。

    思路

    比上一题带劲,本来打算打表打个卡的,结果发现了一个三指针法,效果很好。
    任意丑数都是比这个数小的丑数乘以2,3,5其中之一得到的,要求按照顺序排列,那么就从之前的数中找到未被使用过的数乘一下,然后比较,就可以得到新的数了。
    首先初始位为1,设三个指针值n2,n3,n5,初始设为0.之后开始循环,每次循环都找到235未乘过的数字乘一下,然后取最小值为新的丑数。之后,若n2n3n5使用过了,那么指针位+1,下次乘下一个数字,如果都可以,那就都加。把数字记录下来最后输出即可。

    代码

    public static int nthUglyNumber(int n) {
        int[] ans = new int[n];
        int n2 = 0, n3 = 0, n5 = 0;
        ans[0] = 1;
        for (int i = 1; i < n; i++) {
          int min = Math.min(ans[n2] * 2, Math.min(ans[n3] * 3, ans[n5] * 5));
          ans[i] = min;
          if (min == ans[n2]*2) {
            n2++;
          }
          if (min == ans[n3]*3) {
            n3++;
          }
          if (min == ans[n5]*5) {
            n5++;
          }
    
        }
        return ans[n-1];
      }
      
    
  • 相关阅读:
    Spark提交任务到集群
    在Spark中使用Kryo序列化
    Linux用户与用户组的详解
    Linux一键安装PHP/JAVA环境OneinStack
    Redis常用命令
    MySQL高效分页解决方案集
    linux 发邮件
    Linux 安全
    Linux Shell 文本处理工具集锦
    MySQL 获得当前日期时间(以及时间的转换)
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12151780.html
Copyright © 2020-2023  润新知