public static int GetUglyNumber_Solution(int index) {
if (index <= 0)
return 0;
int[] uglyNumbers = new int[index];
uglyNumbers[0] = 1;
int nextUglyIndex = 1;
//保存3个下标,这3个下标的数对应的乘积要比最新的丑数要大(避免重复计算相同的丑数)
int multiply2Index = 0;
int multiply3Index = 0;
int multiply5Index = 0;
while (nextUglyIndex < index) {
uglyNumbers[nextUglyIndex] = min(uglyNumbers[multiply2Index] * 2, uglyNumbers[multiply3Index] * 3,
uglyNumbers[multiply5Index] * 5);
while (uglyNumbers[multiply2Index] * 2 <= uglyNumbers[nextUglyIndex])
multiply2Index++;
while (uglyNumbers[multiply3Index] * 3 <= uglyNumbers[nextUglyIndex])
multiply3Index++;
while (uglyNumbers[multiply5Index] * 5 <= uglyNumbers[nextUglyIndex])
multiply5Index++;
nextUglyIndex++;
}
return uglyNumbers[nextUglyIndex - 1];
}
public static int min(int a, int b, int c) {
int min = a > b ? b : a;
min = min > c ? c : min;
return min;
}