解法一

思想其实和丑数是一样的,参见:剑指 Offer 49. 丑数

  1. class Solution {
  2. public int nthSuperUglyNumber(int n, int[] primes) {
  3. final int len = primes.length;
  4. // dp[i]表示第i+1个丑数
  5. int[] dp = new int[n];
  6. dp[0] = 1;
  7. int[] pointer = new int[len];
  8. int[] num = new int[len];
  9. for (int i = 0; i < len; ++i) {
  10. num[i] = dp[pointer[i]] * primes[i];
  11. }
  12. for (int i = 1; i < n; ++i) {
  13. dp[i] = min(num);
  14. for (int j = 0; j < len; ++j) {
  15. if (num[j] == dp[i]) {
  16. ++pointer[j];
  17. num[j] = dp[pointer[j]] * primes[j];
  18. }
  19. }
  20. }
  21. return dp[n - 1];
  22. }
  23. private int min(int[] arr) {
  24. int min = Integer.MAX_VALUE;
  25. for (int i : arr) {
  26. if (i < min) {
  27. min = i;
  28. }
  29. }
  30. return min;
  31. }
  32. }