タイトル
見つけるためのプログラム書く n
番目の醜い番号を。
醜い番号は 正の数 、その素因数のみが含ま 2, 3, 5
。
例:
入力: N = 10 出力: 12 説明:1, 2, 3, 4, 5, 6, 8, 9, 10, 12
最初の配列で10
醜い番号は。
注意:
1
典型的には、醜い数として扱われます。n
1690を超えることはできません。
思考
この質問は非常に興味深いアイデアです。
1、2、3、番号リストを乗じ増倍率のためにそれらを記録します。
2、3つの乗数乗算のそれぞれ、およびリストに追加、最小を選択します。
(番号は、乗算係数は、リスト内の現在の次の乗数因子であるように、昇順に番号であるため)3、因子の数を更新することにより、図で示されます。
答え
def nthUglyNumber(self, n: int) -> int:
i2,i3,i5 = 0,0,0
uglyNums = [1]
n0 = 1
while n0 < n:
u2, u3, u5 = 2*uglyNums[i_f2], 3*uglyNums[i_f3], 5*uglyNums[i_f5]
u_min = min([u2, u3, u5])
# 这里可能出现成绩结果相同的情况,所以需要对每个factor更新,而不是只更新乘积的
if u_min == u_multiply2:
i_f2 += 1
if u_min == u_multiply3:
i_f3 += 1
if u_min == u_multiply5:
i_f5 += 1
uglyNums.append(u_min)
n0+=1
return uglyNums[-1]