101:Ugly Number II

来源:互联网 发布:windows xp mobile 编辑:程序博客网 时间:2024/06/07 18:08

题目:Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number, and n does not exceed 1690.

题目详情见https://leetcode.com/problems/ugly-number-ii/#/description

解析:我们可以维持三个序列,这三个序列分别是

1 * 2, 2 * 2, 3 * 2, 4 * 2, 5 2, 6 2, 8 *2, ….

1 * 3, 2 * 3, 3 * 3, 4 * 3, 5 3, 6 3, 8 *3, ….

1 * 5, 2 * 5, 3 * 5, 4 * 5, 5 5, 6 5, 8 *5, ….

其中1, 2, 3,4, 5, 6, 8 … 是丑陋数序列,每次从这三个序列中找到一个最小的数作为下一个丑陋数

代码如下:

// 时间复杂度 O(n),空间复杂度 O(n)class Solution {public:        int nthUglyNumber(int n) {                // un 表示存储 ugly number 的数组                vector<int> un(1, 1); // 1 是第一个丑陋数                int i2 = 1, i3 = 1, i5 = 1;                while (un.size() < n) {                        int n2 = 2 * num[i2 - 1];                        int n3 = 3 * num[i3 - 1];                        int n5 = 5 * num[i5 - 1];                        int tmp = min(n1, min(n3, n5));                        if (tmp == n2) ++i2;                        else if (tmp == n3) ++i3;                        else ++i5;                        if (tmp != un.back()) un.push_back(tmp);                }                return un.back();        }};
0 0
原创粉丝点击