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

剑指offer 33.丑数

时间:2020-03-04 14:19:26      阅读:43      评论:0      收藏:0      [点我收藏+]

标签:ret   solution   off   turn   最小值   一个   记录   题目   顺序   

剑指offer 33.丑数

题目

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

思路

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

代码

  public int GetUglyNumber_Solution(int index) {
    if(index==0){
      return 0;
    }
    int[] ans = new int[index];
    int n2 = 0, n3 = 0, n5 = 0;
    ans[0] = 1;
    for (int i = 1; i < index; 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[index-1];
  }

剑指offer 33.丑数

标签:ret   solution   off   turn   最小值   一个   记录   题目   顺序   

原文地址:https://www.cnblogs.com/blogxjc/p/12409104.html

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