剑指offer-面试题49-丑数-空间换时间

/*
题目:
	求从1开始的第n个丑数。
*/
/*
思路:
	按顺序列出各个丑数。
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>


using namespace std;


int GetUglyNumber_Solution(int index) {
    if(index <= 0) return 0;
    int uglyNumbers[index];
    uglyNumbers[0] = 1;
    int *pMultiply2 = uglyNumbers;
    int *pMultiply3 = uglyNumbers;
    int *pMultiply5 = uglyNumbers;
    int next = 1;

    while(next < index){
        uglyNumbers[next++] = min(min((*pMultiply2)*2,(*pMultiply3)*3),(*pMultiply5)*5);

        while((*pMultiply2)*2 <= uglyNumbers[next-1]){
                pMultiply2++;
        }
        while((*pMultiply3)*3 <= uglyNumbers[next-1]){
                pMultiply3++;
        }
        while((*pMultiply5)*5 <= uglyNumbers[next-1]){
                pMultiply5++;
        }
    }
    return uglyNumbers[index-1];

}

int main(){
    cout<<GetUglyNumber_Solution(6);

    return 0;
}

   

原文地址:https://www.cnblogs.com/buaaZhhx/p/12056934.html