class Solution {
public:
int nthUglyNumber(int n) {
if(n <= 0)
return 0;
int nthNum = 1;
int i2= 0, i3 = 0, i5 = 0;
vector<int> nums;
nums.push_back(1);
while(nums.size() < n)
{
if(nums[i2] * 2 == nums[nums.size() - 1])
i2++;
if(nums[i3] * 3 == nums[nums.size() - 1])
i3++;
if(nums[i5] * 5 == nums[nums.size() - 1])
i5++;
if(nums[i2]*2 < nums[i3]*3)
{
if(nums[i3]*3 < nums[i5]*5)
{
nums.push_back(nums[i2]*2);
i2++;
}
else
{
if(nums[i2]*2 < nums[i5]*5)
{
nums.push_back(nums[i2]*2);
i2++;
}
else
{
nums.push_back(nums[i5]*5);
i5++;
}
}
}
else
{
if(nums[i2]*2 < nums[i5]*5)
{
nums.push_back(nums[i3]*3);
i3++;
}
else
{
if(nums[i3]*3 < nums[i5]*5)
{
nums.push_back(nums[i3]*3);
i3++;
}
else
{
nums.push_back(nums[i5]*5);
i5++;
}
}
}
}
return nums[nums.size()-1];
}
};
更简单的写法:
class Solution {
public:
int FindMin(int x, int y, int z)
{
int minNum = (x > y)?y:x;
minNum = (minNum < z)?minNum:z;
return minNum;
}
int nthUglyNumber(int n) {
if(n <= 0)
return 0;
int nthNum = 1;
int i2= 0, i3 = 0, i5 = 0;
vector<int> nums;
nums.push_back(1);
while(nums.size() < n)
{
int minNum = FindMin(nums[i2] * 2, nums[i3] * 3, nums[i5] * 5);
if(nums[i2]*2 == minNum)
i2++;
if(nums[i3]*3 == minNum)
i3++;
if(nums[i5]*5 == minNum)
i5++;
nums.push_back(minNum);
}
return nums[nums.size()-1];
}
};