0
点赞
收藏
分享

微信扫一扫

LeetCode 313. Super Ugly Number

yundejia 2022-10-18 阅读 91

​​题目​​

寻找第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;
}
};



举报

相关推荐

0 条评论