题目:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:
1.依次从零开始判断每个数是否是丑数,这样子复杂度过高
2.利用丑数*2、3、5还是丑数,将当前结果保存在res中、维护index2 index3 index5 分别表示和2、3、5相乘的丑数对应在res中的下标
维护cur2 cur3 cur5 分别为res[index2] * 2 res[index3] * 3 res[index5] * 5,每次取cur2 cur3 cur5中最小的放到res中并且更新res
代码:
class Solution {
public:
int GetUglyNumber_Solution(int index)
{
if (1 == index)
return 1;
int index2 = 0, index3 = 0, index5 = 0;
int cur2 = 2, cur3 = 3, cur5 = 5;
vector<int> res;
res.resize(index);
res.push_back(1);
for(int i=0; i<index-1; i++)
{
int cur_min = min(cur2, min(cur3, cur5));
res[i+1] = cur_min;
cur2 = cur2 == cur_min ? res[++index2] * 2 : cur2;
cur3 = cur3 == cur_min ? res[++index3] * 3 : cur3;
cur5 = cur5 == cur_min ? res[++index5] * 5 : cur5;
}
return res[index-1];
}
};