解题思路:
丑数就是2x3y5z,所以,根据这个定义,也就是说,我们对每个丑数*2、*3、*5,它依然是个丑数。
创建一个数组,大小为index,填充这个数组,最后arr[index-1]就是第index个丑数。
根据题意,index[0]=1,定义三个变量i2=0,i3=0,i5=0,分别对应将要乘以2、3、5的丑数的下标。
每次比较三个丑数,最小的那个丑数放入数组,比如arr[i2]*2最小,放入arr[i]这个位置,那么下一次要乘以2的丑数的下标就要往后移动一个位置,即++i2;i3、i5同理。
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index==0) return 0;
//丑数无非就是2^x*3^y*5^z
vector<int> nums(index);
nums[0]=1;
int i2=0,i3=0,i5=0;
//开始从1填充丑数
for(int i=1;i<index;++i){
nums[i]=min(nums[i2]*2,min(nums[i3]*3,nums[i5]*5));
if(nums[i]==nums[i2]*2)
++i2;
if(nums[i]==nums[i3]*3)
++i3;
if(nums[i]==nums[i5]*5)
++i5;
}
return nums[index-1];
}
};