题目描述
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
算法思想
由题意可知一个丑数可以通过另一个丑数 * 2 3 5得到,每个丑数*2 3 5 后可以看成是一个递增数组;
初始分别指向三个有序链表第一个元素,这三个有序链表分别就是ret数组元素分别乘以2,3,5得到的,要注意一点,这三个序列中可能有重复的元素,要进行去重的操作,最后返回结果数组ret即可。
代码生成
class Solution {
public:int nthUglyNumber(int n) {vector<int> ret (n);ret[0] = 1; //第一个丑数为1int i=0,j=0,k=0; for(int index = 1; index < n; index++){int temp = min(ret[i]*2,min(ret[j]*3,ret[k]*5));//三个链表中可能有哦在相同的元素,只要最小的,进行去重if(temp == ret[i] * 2) i++;if(temp == ret[j] * 3) j++;if(temp == ret[k] * 5) k++;ret[index] = temp;} return ret[n -1];}
};