313. 超级丑数
2018-11-06 本文已影响0人
calm_peng

/*
分析:给了一个质数列表,来作为 基本元 ,
按照之前的思路,
为每一个 基本元赋予一个 指针(下标)
,用于标记应该与丑数数组中的第几个相乘,
为一个基本元赋予一个,
与对应丑数数组(指针指向的)中的值相乘的积的一个积数组,
每次选出 积数组中的,最小值,放入丑数数组中,
然后将指针数组中对应的加一(若有多个便将多个都要选中)。
*/
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;
}
}