LeetCode 313. Super Ugly Number

分析

难度 中
来源 https://leetcode.com/problems/super-ugly-number/

题目

Write a program to find the nth super ugly number.
Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.
Example:
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] of size 4.
Note:
• 1 is a super ugly number for any given primes.
• The given numbers in primes are in ascending order.
• 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
• The nth super ugly number is guaranteed to fit in a 32-bit signed integer.

解答

package LeetCode;

public class L313_SuperUglyNumber {
    public int nthSuperUglyNumber(int n, int[] primes) {//参照264题解法
        int[] uglyNums=new int[n];
        int primeLen=primes.length;
        int[] indexs=new int[primeLen];
        int[] temps=new int[primeLen];
        for(int i=0;i<primeLen;i++){
            indexs[i]=0;
            temps[i]=primes[i];
        }
        uglyNums[0]=1;
        for(int i=1;i<n;i++)
            uglyNums[i]=Integer.MAX_VALUE;
        int last;
        for(int i=1;i<n;i++){
            last=uglyNums[i-1];
            for(int j=0;j<primeLen;j++){
                if(last==temps[j])
                    temps[j]=primes[j]*uglyNums[++indexs[j]];
                if(uglyNums[i]>temps[j])
                    uglyNums[i]=temps[j];
            }
        }
        return uglyNums[n-1];
    }
    public static void main(String[] args){
        L313_SuperUglyNumber l313=new L313_SuperUglyNumber();
        int n=12;
        int[] primes={2,7,13,19};
        System.out.println(l313.nthSuperUglyNumber(n,primes));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值