leetcode:264醜い数II

タイトル

見つけるためのプログラム書く  n番目の醜い番号を。

醜い番号は 正の数  、その素因数のみが含ま  2, 3, 5。 

例:

入力: N = 10
 出力: 12
 説明:1, 2, 3, 4, 5, 6, 8, 9, 10, 12最初の配列で10醜い番号は。

注意:  

  1. 1 典型的には、醜い数として扱われます。
  2. 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]

 

公開された45元の記事 ウォンの賞賛1 ビュー3376

おすすめ

転載: blog.csdn.net/qq_22498427/article/details/104470314