一、题目内容

image.png

二、题解

解法1:

思路

代码

  1. class Solution {
  2. public int nthUglyNumber(int n) {
  3. int a = 0, b = 0, c = 0;
  4. int[] dp = new int[n];
  5. dp[0] = 1;
  6. for (int i = 1; i < n; i++) {
  7. int n2 = dp[a] * 2;
  8. int n3 = dp[b] * 3;
  9. int n5 = dp[c] * 5;
  10. //最近最小的一个,通过x2或者x3或者x5得到的数
  11. dp[i] = Math.min(Math.min(n2, n3), n5);
  12. //命中的值加1,保持下次乘以2、3、5时,仍然是最小一个乘完大于dp[i-1]的数
  13. if (dp[i] == n2) {
  14. a++;
  15. }
  16. if (dp[i] == n3) {
  17. b++;
  18. }
  19. if (dp[i] == n5) {
  20. c++;
  21. }
  22. }
  23. return dp[n - 1];
  24. }
  25. }