剑指offer 49.丑数
解题思路:
使用三指针
第一个丑数是1
, 之后的丑数都是基于前面的丑数分别乘以2
、3
、5
组成的,
每次将当前三个丑数中最小的一个添加进数组, 这个最小的丑数是由谁计算的, 谁指针就后移一位
注意:
使用的是三个if
不能使用else if
例如丑数为6
的时候, 既可以由3 * 2
得到, 又可以由2 * 3
得到
class Solution {public int nthUglyNumber(int n) {int a = 0, b = 0, c = 0;int[] dp = new int[n];dp[0] = 1;for(int i = 1; i < n; i++){int n1 = dp[a] * 2, n2 = dp[b] * 3, n3 = dp[c] * 5;dp[i] = Math.min(n1, Math.min(n2, n3));if(n1 == dp[i]) a++;if(n2 == dp[i]) b++;if(n3 == dp[i]) c++;}return dp[n - 1];}
}
本文发布于:2024-02-03 23:47:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170697852751774.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |