把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。
自己的方法超時了,看到了一段牛逼代碼
public int GetUglyNumber_Solution(int index) {
if (index < 7) return index;
int[] re = new int[index];
re[0] = 1;
int t2 = 0, t3 = 0, t5 = 0;
for (int i = 0; i < index; i++) {
re[i] = Math.min(re[t2] * 2, Math.min(re[t3] * 3, re[t5] * 5));
if (re[i] == re[t2] * 2) t2++;
if(re[i] == re[t3]*3) t3++;
if(re[i] == re[t5]*5) t5++;
}
return re[index - 1];
}
三個if輕鬆去重,很給力,感覺空間複雜度很高,其實o(n)也還好