题解 | #丑数#

丑数

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

第七十二题
维护三个指针,分别表示 最后一次*235的值的位置
原理看答案的图思考一下 我表述不出来QAQ
大致思想就是每次找最后乘235的最后一个,并且乘的东西,是在ans中依次找下去的,用过了,就找ans后一个。
ans中依次存储的都是最小的,再依次比较最小的乘235谁大谁小。
......看答案解析吧 -> _ ->

class Solution {
public:
    int GetUglyNumber_Solution(int index) {
        // 丑数的定义为只由235的乘积组成
        
        // i用来维护和更新最新的ans
        // num235从头开始计算,记录乘235的最后一次 所在的位置
        // 每次只要从三个索引的位置 找到*2或3或5 中最小的 并更新num235
        
        // 1 0 0    2
        // 1 1 0    3
        // 2 1 0    4
        // 2 1 1    5
        // 3 2 1    6
        // 下一次找 就是从ans[3]*2,ans[2]*3,ans[1]*5 找最小值
        // ans里面都是最小的了,再往后肯定更大
        // 去看看讲解的演示吧QAQ
        int num2=0,num3=0,num5=0;
        int*ans=new int[index];
        ans[0]=1;
        for(int i=1;i<index;i++)
        {
            ans[i]=min(min(ans[num2]*2,ans[num3]*3),ans[num5]*5);
            if(ans[i] == ans[num2]*2)
                num2++;
            if(ans[i]==ans[num3]*3)
                num3++;
            if(ans[i]==ans[num5]*5)
                num5++;
//             cout<<num2<<num3<<num5<<endl;
        }
    return ans[index-1];
    }
};

题解 文章被收录于专栏

一遍做剑指offer 一边保存做题步骤 并附带详细注释哦

全部评论

相关推荐

05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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