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

丑数

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];
    }
};



全部评论

相关推荐

合适才能收到offe...:项目岗是什么岗?我看你有段好像跟策划运营相关,如果找运营的话第三段经历写详细点儿。 个人建议是把自我评价删了换成专业技能放在工作经验上或者下面。学生会那个也可以删,把第一个包装成店铺运营,写4-6给点。第三个也是写4-6个点。注意工作内容➕部分数据。 投递的时候BOS招呼用语改一下,换成我有xx工作经验,熟练掌握xx技能样式,也可以简历截图然后直接发送。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务