醜數II,LeetCode264,三指標法

2021-10-08 06:51:30 字數 1311 閱讀 6096

題目描述:

編寫乙個程式,找出第 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與已有醜數相...