返回介绍

33.丑数

发布于 2023-08-30 21:54:39 字数 755 浏览 0 评论 0 收藏 0

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

思路:每个丑数乘2,3,5都是丑数,每次记录最小的那个丑数,则该丑数序列是有序的。

如果x=y=z那么最小丑数一定是乘以2的,但关键是有可能存在x>y>z的情况,所以我们要维持三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,要把相应的指针+1;

public class Solution {
  public int GetUglyNumber_Solution(int index) {
    if(index<=0) return 0;
    int[] result = new int[index];
    result[0] = 1;
    int p2 = 0, p3 = 0, p5 = 0;
    for(int i = 1; i < index; i++){
      result[i] = Math.min(result[p2]*2, Math.min(result[p3]*3, result[p5]*5));
      if(result[i] == result[p2]*2) p2++;
      if(result[i] == result[p3]*3) p3++;
      if(result[i] == result[p5]*5) p5++;
    }
    return result[index-1];
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文