最笨的办法,没有任何技术含量。。。。

丑数

http://www.nowcoder.com/questionTerminal/6aa9e04fc3794f68acf8778237ba065b

题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

适用与拿到这道题没有任何思路的朋友,大佬轻喷😅
一个丑数肯定会被分解成为 2×m*3*n*5*l的形式,所以新的丑数都是通过一个现有的丑数×2、×3 或者×5得到的,题目的意思是找第n个满足条件的丑数。
如果通过1 与 {2,3,5} 相乘,再用得到的乘积继续与{2,3,5}相乘, 直接生成n多个丑数,放到数组里面,然后 返回下标为index - 1的丑数就是答案。
class Solution {
public:
    
    //用于去重
    void func(vector<int>& v)
    {
        sort(v.begin(),v.end());
        auto it = unique(v.begin(),v.end());
        v.erase(it,v.end()); 
    }

    int GetUglyNumber_Solution(int index) {
             
        int nums[3] = {2,3,5};        
        vector<int> res = {1};
        int max = 0;   
        for(int i = 0; i < index;  i++)
        {
            //每次生成新3个新的丑数,可能会与之前的重复,所以要进行去重。
            for(int j = 0; j < 3; j++)
            {
                res.push_back(nums[j] * res[i]);
            }
            func(res);
        }
       
        //因为可能会出现超出int范围,所以需要把超出范围的负数排除        
        auto it = res.begin();
        while(*it < 0)
        {
            it ++;
        }
        res.erase(res.begin(),it);
        
        return res[index - 1];
    }
};



全部评论

相关推荐

不愿透露姓名的神秘牛友
今天 10:52
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务