313. 超级丑数

2018-11-06  本文已影响0人  calm_peng
image.png
/*
分析:给了一个质数列表,来作为 基本元 ,
按照之前的思路,
为每一个 基本元赋予一个 指针(下标)
,用于标记应该与丑数数组中的第几个相乘,
为一个基本元赋予一个,
与对应丑数数组(指针指向的)中的值相乘的积的一个积数组,
每次选出 积数组中的,最小值,放入丑数数组中,
然后将指针数组中对应的加一(若有多个便将多个都要选中)。

*/


class Solution {
    
    
    
    public static int nthSuperUglyNumber(int n, int[] primes) {
    int [] res = new int [n];
    res[0] = 1;
    int []temp = Arrays.copyOf(primes, primes.length);
    int []point = new int[primes.length];
    for(int i = 1;i<n;i++) {
        int min = minNumInArray(temp);
        res[i] = min;
        for(int k = 0;k<temp.length;k++) {
            if(temp[k]==min) {
                point[k]++;
                temp[k] = res[point[k]]*primes[k];
                
            }
                
        }
        
    }
    return res[n-1];
    
    
    
}

public static int  minNumInArray(int [] temp) {
    int min = temp[0];
    for(int i = 0 ;i<temp.length;i++) {
        
        if(temp[i]<min) {
            min = temp[i];
        }
            
    }
    
    
    return min;
}
    
}

leetcode

上一篇 下一篇

猜你喜欢

热点阅读