丑数:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路:
每个丑数都是上一个乘过2/3/5其中的某一个
比如第2个丑数=min(1x2,1x3,1x5)=2
1 | 2 | |||||
---|---|---|---|---|---|---|
x3/x5 | x2 |
比如第3个丑数=min(2x2,1x3,1x5)=3
1 | 2 | 3 | ||||
---|---|---|---|---|---|---|
x5 | x2/x3/ |
比如第4个丑数=min(2x2,2x3,1x5)=4
1 | 2 | 3 | 4 | |||
---|---|---|---|---|---|---|
x5 | x3/ | x2 |
·
·
·
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index<7)return index;
vector<int> s(index);
s[0] = 1;
int m2=0,m3=0,m5=0,t=1 ;
while(t!= index){
s[t] = min(s[m2]*2,min(s[m3]*3,s[m5]*5));
if(s[t] == s[m2]*2) m2++;
if(s[t] == s[m3]*3) m3++;
if(s[t] == s[m5]*5) m5++;
t++;
}
return s[t-1];
}
};