丑数

题目描述

  把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数
  思路:新的丑数由前面已有的丑数乘以2, 3, 5得到。维护T2,T3,T5,新的丑数即为min(M2, M3, M5)。
 1 class Solution {
 2 public:
 3     int min(int a, int b, int c)
 4     {
 5         if(a>b)a=b;
 6         if(a>c)a=c;
 7         return a;
 8     }
 9     int GetUglyNumber_Solution(int index) {
10         if(index<=0)return 0;
11         int *arr=new int[index];
12         arr[0]=1;
13         int T2=0, T3=0, T5=0;
14         for(int i=1; i<index; ++i)
15         {
16             arr[i]=min(2*arr[T2], 3*arr[T3], 5*arr[T5]);
17             while(2*arr[T2]<=arr[i])++T2;
18             while(3*arr[T3]<=arr[i])++T3;
19             while(5*arr[T5]<=arr[i])++T5;
20         }
21         int res=arr[index-1];
22         delete []arr;
23         return res;
24     }
25 };

 

 

posted @ 2017-12-29 10:31  jeysin  阅读(160)  评论(0编辑  收藏  举报