栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode-313. Super Ugly Number [C++][Java]

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-313. Super Ugly Number [C++][Java]

313. Super Ugly Numberhttps://leetcode.com/problems/super-ugly-number/

A super ugly number is a positive integer whose prime factors are in the array primes.

Given an integer n and an array of integers primes, return the nth super ugly number.

The nth super ugly number is guaranteed to fit in a 32-bit signed integer.

Example 1:

Input: n = 12, primes = [2,7,13,19]
Output: 32
Explanation: [1,2,4,7,8,13,14,16,19,26,28,32] is the sequence of the first 12 super ugly numbers given primes = [2,7,13,19].

Example 2:

Input: n = 1, primes = [2,3,5]
Output: 1
Explanation: 1 has no prime factors, therefore all of its prime factors are in the array primes = [2,3,5].

Constraints:

  • 1 <= n <= 106
  • 1 <= primes.length <= 100
  • 2 <= primes[i] <= 1000
  • primes[i] is guaranteed to be a prime number.
  • All the values of primes are unique and sorted in ascending order.

【C++】
class Solution {
public:
    int nthSuperUglyNumber(int n, vector& primes) {
        int i, j, k = primes.size();
    	vector idx(k,1);
        vector dp(n+1, LONG_LONG_MAX);
        dp[1] = 1;
    	for (i = 2; i <= n; ++i) {	
	    	for (j = 0; j < k; ++j) {
                long long tmp = dp[idx[j]]*primes[j];
                if (tmp < dp[i]) {dp[i] = tmp;}
            }
	    	for(j = 0; j < k; ++j) {
                if(dp[i] == dp[idx[j]]*primes[j]) {idx[j]++;}
            }
		}
		return dp[n];
    }
};

【Java】
class Solution {
    public int nthSuperUglyNumber(int n, int[] primes) {
        int i, j, k = primes.length;
    	int[] idx = new int[k];
        Arrays.fill(idx, 1);
        int[] dp = new int[n+1];
        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[1] = 1;
    	for (i = 2; i <= n; ++i) {	
	    	for (j = 0; j < k; ++j) {
                int tmp = dp[idx[j]]*primes[j];
                if (tmp < dp[i]) {dp[i] = tmp;}
            }
	    	for(j = 0; j < k; ++j) {
                if (dp[i] == dp[idx[j]]*primes[j]) {idx[j]++;}
            }
		}
		return dp[n];
    }
}

参考文献

【1】丑数_百度百科

【2】LeetCode 313. 超级丑数(动态规划)_Michael阿明的博客-CSDN博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847545.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号