标签:
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. For example, [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) 1 is a super ugly number for any given primes. (2) The given numbers in primes are in ascending order. (3) 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000.
用一个arraylist来存同时赢得竞标的primes, 然后这些primes对应的pointer都要往后移一位
1 public class Solution { 2 public int nthSuperUglyNumber(int n, int[] primes) { 3 int[] uglys = new int[n]; 4 uglys[0] = 1; 5 int[] pointers = new int[primes.length]; 6 7 for (int i=1; i<=n-1; i++) { 8 int min=Integer.MAX_VALUE; 9 ArrayList<Integer> minPm = new ArrayList<Integer>(); // initialization 10 for (int j=0; j<primes.length; j++) { 11 if (uglys[pointers[j]] * primes[j] <= min) { 12 if (uglys[pointers[j]] * primes[j] < min) { 13 min = uglys[pointers[j]] * primes[j]; 14 minPm = new ArrayList<Integer>(); 15 } 16 minPm.add(j); 17 } 18 } 19 for (int k=0; k<minPm.size(); k++) { 20 pointers[minPm.get(k)]++; 21 } 22 uglys[i] = min; 23 } 24 return uglys[n-1]; 25 } 26 }
标签:
原文地址:http://www.cnblogs.com/EdwardLiu/p/5092959.html