美文网首页
【剑指 offer】丑数

【剑指 offer】丑数

作者: 邓泽军_3679 | 来源:发表于2019-05-05 12:10 被阅读0次

    1、题目描述

    我们把只包含因子2、3和5的数称作丑数(Ugly Number)。

    例如6、8都是丑数,但14不是,因为它包含因子7。

    求第n个丑数的值。

    样例:

    输入:5
    输出:5

    注意:习惯上我们把1当做第一个丑数。

    2、问题描述:

    1, 2, 3, 4, 5, 6, 8, 9, 10 ...

    3、问题关键:

    • 可以看出下一个丑数是前面的某个数乘于(2, 3, 5)中的一个获得的最小值。
    • 可以用三个指针,i,j,k,依次指向1,2,3 ...前面的数,乘于(2, 3, 5),穷举所有的丑数。

    4、C++代码:

    class Solution {
    public:
        int getUglyNumber(int n) {
            vector<int> q(1, 1);//定义一个可变数组,值为1。
            int i = 0, j = 0, k = 0;//同时指向第一个位置。
            while(-- n) {
                int t = min(q[i] * 2, min(q[j] * 3, q[k] * 5));//下一个数是,当前数组中乘于(2, 3, 5)得到的最小值。
                q.push_back(t);
                if (q[i] * 2 == t) i ++;//放入数组中,并将i向后移动一个位置。
                if (q[j] * 3 == t) j ++;
                if (q[k] * 5 == t) k ++;
            }
            return q.back();//最后一个就是第n个丑数。
            
        }
    };
    

    相关文章

      网友评论

          本文标题:【剑指 offer】丑数

          本文链接:https://www.haomeiwen.com/subject/fvpcoqtx.html