丑数
题目描述
把只包含因子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 };