丑数

我们把只包含因子2,3和5的数称为丑数。求按从小到大的顺序的第1500个丑数。

这里讲解一种用空间换时间的解法。

int Min(int number1, int number2, int number3)
{
    int min = (number1 < number2) ? number1 : number2;
    min = (min < number3) ? min: number3;
    return min;
}

int GetUglyNumber(int index)
{
    if(index <=0)
        return 0;

    int *pUglyNumbers = new int[index];
    pUglyNumbers[0] = 1; //规定1为第一个丑数
    int nextUglyIndex = 1;

    int* pMultiply2 = pUglyNumbers;
    int* pMultiply3 = pUglyNumbers;
    int* pMultiply5 = pUglyNumbers;

    while(nextUglyIndex < index)
    {
        int min = Min( *pMultiply2*2,*pMultiply3*3,*pMultiply5*5);
        pUglyNumbers[nextUglyIndex] = min;

        while( *pMultiply2 * 2 <= pUglyNumbers[nextUglyIndex])
            ++pMultiply2;
        while(*pMultiply3* 3 <= pUglyNumbers[nextUglyIndex])
            ++pMultiply3;
        while(*pMultiply5* 5 <= pUglyNumbers[nextUglyIndex])
            ++pMultiply5;

        ++nextUglyIndex;
    }
    int Ugly = pUglyNumbers[nextUglyIndex - 1];
    delete [] pUglyNumbers;
    return Ugly;

}

 

posted @ 2013-03-07 20:48  没离开过  阅读(108)  评论(0编辑  收藏  举报