zoukankan      html  css  js  c++  java
  • 丑数

    丑数

    题目描述

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

    思路: 当前丑数之前的某个数乘以2后小于当前丑数, 这个数之后的所有丑数乘以2后都大于当前丑数, 同理, 对因子3和5都用这个方法, 找出三个因子对应的位置, 并保存用于下次循环

    class Solution {
    public:
        int minNumber(int n1, int n2, int n3) {
            return ((n1 < n2 ? n1 : n2) < n3 ? (n1 < n2 ? n1 : n2) : n3);
        }
        
        int GetUglyNumber_Solution(int index) {
            if(0 >= index) {
                return 0;
            }
            vector<int> vt;
            vt.push_back(1);
            //int pN = 0;
            int pN2 = 0;
            int pN3 = 0;
            int pN5 = 0;
            
            while (vt.size() < index) {
                int min = minNumber(vt[pN2] * 2, vt[pN3] * 3, vt[pN5] * 5);
                vt.push_back(min);
                while (vt[pN2] * 2 <= min) {
                    pN2++;
                }
                while (vt[pN3] * 3 <= min) {
                    pN3++;
                }
                while (vt[pN5] * 5 <= min) {
                    pN5++;
                }
            }
            return vt.back();
        }
    };
    

    暴力法, 把从1到n的所有数字全都判断一次, 牛客提交没通过, 可能超时了

    class Solution {
    public:
        
        bool isUglyNumber(int number) {
            while (number % 2 == 0) {
                number /= 2;
            }
            while (number % 3 == 0) {
                number /= 3;
            }
            while (number % 5 == 0) {
                number /= 5;
            }
    
            return (number == 1) ? true : false;
        }
        
        int GetUglyNumber_Solution(int index) {
            if (0 >= index) {
                return 0;
            }
            
            int number = 0;
            int uglyFound = 0;
            
            while (uglyFound < index) {
                number++;
                if (isUglyNumber(number)) {
                    uglyFound++;
                }
            }
            return number;
        }
    };
    
  • 相关阅读:
    管理ceph缓存池
    Ceph更换OSD磁盘
    crushmap磁盘智能分组
    Angular 初体验
    音视频开发-FFmpeg
    开源项目OEIP 游戏引擎与音视频多媒体(UE4/Unity3D)
    Yolov3代码分析与训练自己数据集
    整合Yolov3到UE4/Unity3D
    CUDA版Grabcut的实现
    CUDA加opencv复现导向滤波算法
  • 原文地址:https://www.cnblogs.com/hesper/p/10518532.html
Copyright © 2011-2022 走看看