题目描述:
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
分析:
用三个指针,*2,*3,*5慢慢往后移,每个丑数都要*2,*3,*5,找出最小的数加入数组中。
如果新加的丑数为指针为*2的数*2得到,那么*2指针后移一位。其他*3,*5相同。
代码:
1 class Solution { 2 public: 3 int GetUglyNumber_Solution(int index) { 4 if(index < 7) return index; 5 vector<int> res(index); 6 res[0] = 1; 7 int t2 = 0, t3 = 0, t5 = 0; 8 int r2, r3, r5; 9 for(int i = 1; i < index; i++) { 10 r2 = res[t2] * 2; 11 r3 = res[t3] * 3; 12 r5 = res[t5] * 5; 13 res[i] = min(r2, min(r3, r5)); 14 if(res[i] == r2) t2++; 15 if(res[i] == r3) t3++; 16 if(res[i] == r5) t5++; 17 } 18 return res[index - 1]; 19 } 20 };