通過尋找醜數 初窺dp演算法

2021-10-08 18:38:53 字數 870 閱讀 6665

編寫乙個程式,找出第 n 個醜數。

醜數就是質因數只包含 2, 3, 5 的正整數。

示例:輸入: n = 10

輸出: 12

解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。

說明:1.1 是醜數。

2.n 不超過1690。

class

solution

i++;}

return i-1;

}public

intsolve

(int i)

while

(i%3==0

)while

(i%5==0

)if(i==1)

return0;

}}

現在讓我們運用dp演算法的思路去思考解決問題。動態規劃演算法中的每乙個決策都依賴於此時的狀態,並引起狀態的轉移。乙個決策序列就是在變化的狀態中產生出來的, 所以, 這種多階段的最優化決策解決問題的過程就稱為動態規劃(dp)。

回到題目,我們發現每乙個醜數都是1的2、3、5倍。我們可以建立乙個陣列,將1儲存進去作為最小的醜數。然後陣列中的數乘以因子2、3、5。為了保證陣列有序,且每乙個醜數都能取到,取所得到的最小的數加入陣列即可。在2nums[i2]、3nums[i3]、5*nums[i5]。選出最小的醜數並新增到陣列中。並將該醜數對應的因子指標往前走一步。重複該步驟直到計算完 1690 個醜數。

class

solution

if(temp == nums[i3]*3

)if(temp == nums[i5]*5

)}return nums[n -1]

;}}

經典演算法詳解(9)尋找醜數

題目 我們把只含有因子2 3 5的數稱為醜數。例如6 8都是醜數,而14不是醜數,因為它含有因子7.通常也把1當做醜數。程式設計找出1500以內的全部醜數。注意 使用的演算法效率應盡量高。c 實現 1 include2 3using namespace std 45 判斷乙個數是否是醜數,uglyn...

每日一道演算法題 尋找醜數

題目 我們把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。分析 尋找乙個數是不是滿足某種數 質數,水仙數 等,最簡單的方法就是遍歷,對於任意乙個醜數必定可以寫成2 m ...

每日一道演算法題 尋找醜數

題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。求按從小到大的順序的第1500個醜數。解題思路 第一種方法,暴力解法,從數字1開始遍歷,一直找到第1500個醜數為止,這種窮舉的思路是最簡單的,效率也是...