【牛客题解】 ——丑数

丑数

【牛客题解】 ——丑数_第1张图片
(为啥我第一次看见这个题,感觉思路很简单,但就是写不出代码呢?总结了一句:就是菜,没有别的原因)
思路:
设置三个指针p2,p3,p5,初始值都为0
设置一个存放丑数的数组vector v 的初始值为1
等于说先开始就是这样的:
存放丑数的数组为1
乘以2的队列:2
乘以3的队列:3
乘以5的队列:5

取队头最小的数为2,分别给每个队列的都增加一个数,就是这个最小数分别乘以2, 3,5 变为:
存放丑数的数组1 2
乘以2的队列:4
乘以3的队列:3 6
乘以5的队列:5 10

取队头最小的数为3,分别给每个队列的都增加一个数,就是这个最小数分别乘以2, 3,5 变为:
存放丑数的数组1 2
乘以2的队列:4 6
乘以3的队列:6 9
乘以5的队列:5 10 15

继续算下去,直到存放丑数的数组大小等于index

代码:

class Solution {
public:
    int GetUglyNumber_Solution(int index) 
    {
        if(index<7) //小于7的数时,丑数都为本身
            return index;
        vector<int> v;
        int p2=0,p3=0,p5=0;
        int num=1;
        v.push_back(num);
        while(v.size()<index)
        {
            num=min(v[p2]*2,min(v[p3]*3,v[p5]*5));  //取出队头最小的
            if(v[p2]*2==num) p2++;   //出队的话只需要指针向后移动就好
            if(v[p3]*3==num) p3++;
            if(v[p5]*5==num) p5++;
            v.push_back(num);
        }
        return num;
    }
};

你可能感兴趣的:(C++,牛客力扣习题分析)