剑指offer:49.丑数

剑指offer:49.丑数
题目:
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。

解析:
动态规划解析(c++):
un为保存丑数的数组,a,b,c为三个指针,如果是丑数就往+1。

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int> un(n);//保存丑数
        int a, b, c;
        a = b = c = 0;
        un[0] = 1;//第一个丑数
        for (int i = 1; i < n; ++i) {
            int u1 = un[a] * 2, u2 = un[b] * 3, u3 = un[c] * 5;
            un[i] = min(min(u1, u2), u3);//丑数为三者的最小值

			//移动指针
            if (un[i] == u1) ++a;
            if (un[i] == u2) ++b;
            if (un[i] == u3) ++c;   
        }
        return un[n - 1];
    }
};

猜你喜欢

转载自blog.csdn.net/qq_36156649/article/details/107944606
今日推荐