国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

264. Ugly Number II -Medium

2019-11-10 19:46:47
字體:
來源:轉載
供稿:網友

Question

Write a PRogram to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number, and n does not exceed 1690.

找到第n個丑數。丑數是有限個2、3、5的乘積,例如1,2,3,4,5,6,8,9,10,12是前10個丑數(1是特殊的丑數)。n不大于1690

Example

見題目

Solution

動態規劃解。我剛開始考慮的是dp[i]代表i是否為丑數,它的確定只需要知道dp[i % 2], dp[i % 3]和dp[i % 5],只要有一個是丑數,那么dp[i]必然也是丑數,然后統計丑數的個數直到n。可是這樣我沒法確定到底dp需要多大,所以需要換個思路。dp[i]應該代表第i個丑數,那么它的遞推關系該怎么找呢?其實很簡單,因為下一個丑數必然是乘以2,3或5中的最小的那個數,所以我們只需分別記下乘以2,乘以3,乘以5的最小的數的索引,那么 dp[i] = min(dp[index_2] * 2, dp[index_3] * 3, dp[index_5] * 5),每次得到dp[i]不要忘了更新索引就可以了(注意:因為有可能dp[index_2] * 2和dp[index_3] * 3是相等的,這種情況,兩個索引都要更新)

class Solution(object): def nthUglyNumber(self, n): """ :type n: int :rtype: int """ dp = [0] * n # 1為第一個丑數 dp[0] = 1 # 從1開始向前尋找 index_2, index_3, index_5 = 0, 0, 0 for i in range(1, n): dp[i] = min(dp[index_2] * 2, dp[index_3] * 3, dp[index_5] * 5) # 這里不要elif,因為兩個值可能相等,索引都需要更新 if dp[i] == dp[index_2] * 2: index_2 += 1 if dp[i] == dp[index_3] * 3: index_3 += 1 if dp[i] == dp[index_5] * 5: index_5 += 1 return dp[n - 1]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏边| 德州市| 阳高县| 奎屯市| 武隆县| 思茅市| 二连浩特市| 岳西县| 洪雅县| 太白县| 石泉县| 剑川县| 揭东县| 周口市| 疏勒县| 丹凤县| 即墨市| 清水河县| 申扎县| 虹口区| 毕节市| 安平县| 平顶山市| 河曲县| 葫芦岛市| 苍溪县| 商南县| 施秉县| 临高县| 隆昌县| 当涂县| 宣城市| 宜兴市| 南陵县| 贡觉县| 宁波市| 德庆县| 青河县| 临猗县| 上高县| 西畴县|