丑数
我们把只包含因子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; }