剑指offer-33-丑数

丑数:

把只包含质因子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 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];
    }
};

你可能感兴趣的:(剑指offer-33-丑数)