題目描述:
編寫乙個程式,找出第 n 個醜數。
醜數就是質因數只包含 2, 3, 5 的正整數。
示例:輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。
說明:1 是醜數。
n 不超過1690。
解題思路
醜數的質因數中只包含2,3,5,所以1之後的醜數一定是2或3或5的其中乙個/兩個/三個 的倍數。第n(n>1)個醜數一定比第n-1個醜數大,用乙個陣列uglynum記錄前1690個醜數。用三個指標p2,p3,p5指向指向已有的需分別乘2,3,5的醜數,此時三個乘積中最小的便是下乙個要找的醜數,然後更新乘積結果是最小的指標,即向後移一位。初始時,第乙個醜數為1,p2=p3=p5=0,指向第乙個醜數
求第二個醜數:
u2=uglynum[p2]2=12=2; u3=uglynum[p3]3=13=3; u5=uglynum[p5]5=15=5;
第二個醜數 uglynum[1]=min(u2,u3,u5)=2;
此時更新 p2,即p2++;
求第三個醜數:
u2=uglynum[p2]2=22=4; u3=uglynum[p3]3=13=3; u5=uglynum[p5]5=15=5;
第三個醜數 uglynum[1]=min(u2,u3,u5)=3;
此時更新 p3,即p3++;
求第四個醜數:
u2=uglynum[p2]2=22=4; u3=uglynum[p3]3=23=6; u5=uglynum[p5]5=15=5;
第四個醜數 uglynum[1]=min(u2,u3,u5)=4;
此時更新 p2,即p2++;
求第五個醜數:
u2=uglynum[p2]2=32=6; u3=uglynum[p3]3=23=6; u5=uglynum[p5]5=15=5;
第五個醜數 uglynum[1]=min(u2,u3,u5)=5;
此時更新 p5,即p5++;
**
class
ugly
if(ugly==ugly3)
if(ugly==ugly5)
uglynum[i]
=ugly;}}
};static ugly u;
//只定義乙個物件,這樣在跑測試用例時用同乙個物件,節約時間和記憶體開支
class
solution
};
264 醜數 II 力扣
題意理解 醜數是只能被2,3,5整數的數,輸出第n個醜數 問題分析 用動規思想 第i個醜數隻會和前面的醜數乘以2,3,5的值有關,但我們不會計算每個醜數乘以2,3,4的結果。因為第i個醜數隻會和前面乙個數乘以2最接近第i 1個數的那個數有關,這個數怎麼求,就是拿第i 1個數 2,再計算序列中比這個數...
leetcode題 264 醜數 II(中等)
一 題目描述 264.醜數 ii 中等 編寫乙個程式,找出第 n 個醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。說明 1 是醜數。n 不超過1690。二 解題思路 三指標動態規劃法 1 定義...
leetcode第264題 醜數 (動態規劃)
編寫乙個程式,找出第 n 個醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。說明 1 是醜數。n 不超過1690。並不用每次都嘗試所有組合,我們需要過濾掉不可能的組合 已知2,3,5與已有醜數相...