zoukankan      html  css  js  c++  java
  • LeetCode 313. Super Ugly Number

    题目

    寻找第n个丑数。
    首先我们维护一个丑数的数组,所有的丑数必然是前面的某个丑数乘以primes数组里的某个数字得来。

    所以我们在维护一个primes数组对应的最小丑数数组下标pos,primes[i]*pos[i] 就是未来的某个丑数,按照从小到大一个一个计算。

    class Solution {
    public:
        int pos[105];
        int ugly[1000005];
        int nthSuperUglyNumber(int n, vector<int>& primes) {
            
            if(primes.size()==0)
                return 1;
            
            for(int i=0;i<primes.size();i++)
            {
                pos[i]=1;
            }
            
            ugly[1]=1;
            int ans=1;
            for(int i=2;i<=n;i++)
            {
                int m = INT_MAX;
                
                for(int j=0;j<primes.size();j++)
                {
                    if(primes[j]==1)
                        continue;
                    if(m>primes[j]*ugly[pos[j]])
                    {
                        m=primes[j]*ugly[pos[j]];
                    }
                }
                
                for(int j=0;j<primes.size();j++)
                {
                    if(primes[j]*ugly[pos[j]] == m)
                    {
                        pos[j]++;
                    }
                }
                
                if(m==INT_MAX)
                    m=1;
                ugly[i]=m;
                ans = m;
            }
            
            return ans; 
        }
    };
    
  • 相关阅读:
    C#网络爬虫 WebUtility使用 转义字符 urlCode
    C#遍历文件夹及文件
    ThreadException
    unhandledException
    linq to object
    扩展方法
    反射常规
    字典缓存和泛型缓存
    lock和Monitor(锁对象)
    单例模式
  • 原文地址:https://www.cnblogs.com/dacc123/p/13047626.html
Copyright © 2011-2022 走看看