数据结构练习(27)寻找丑数

http://zhedahht.blog.163.com/blog/static/2541117420094245366965/

思路:

构造很精美,数学知识还是需要不断积累啊。

本来打算用vector容器存放数字,用迭代器获取元素的时候会产生异常。然后意识到vector容器是动态增长大小的,每一次重新开辟空间都会使以前的迭代器失效。

使用C++的时候细节问题一定要各种注意啊。

#include <iostream>

int GetMinOf3(int n1, int n2, int n3)
{
    int ans;
    if (n1 > n2)
        ans = n2;
    else
        ans = n1;

    if (ans > n3)
        ans = n3;

    return ans;
}

int GetUglyNumber(int idx)
{
    int *ugly = new int[idx+1];
    
    int *iter2 = ugly;
    int *iter3 = ugly;
    int *iter5 = ugly;

    int cnt = 1;
    ugly[0] = 1;
    while (cnt < idx)
    {
        int min = GetMinOf3((*iter2)*2, (*iter3)*3, (*iter5)*5);
        ugly[cnt] = min;

        while ((*iter2)*2 <= min)
            ++iter2;
        while ((*iter3)*3 <= min)
            ++iter3;
        while ((*iter5)*5 <= min)
            ++iter5;

        ++cnt;
    }
    return ugly[idx-1];
}

int main()
{
    int n = GetUglyNumber(1500);
    return 0;
}

 

posted @ 2012-12-17 15:45  kedebug  阅读(241)  评论(0编辑  收藏  举报