劍指offer 醜數

2021-07-11 14:15:23 字數 604 閱讀 6466

把只包含因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

分析:《參考程式設計師面試金典》偽**如下

1)初始化array和佇列:q2 q3 q5

2)將1插入array

3)分別將1*2、1*3 、1*5插入q2 q3 q5

4)令x為q2 q3 q5中的最小值,將x新增至array尾部

5)若x存在於:

q2:將 x * 2、x * 3、x*5 分別放入q2 q3 q5,從q2中移除x

q3:將 x * 3、x*5 分別放入q3 q5,從q3中移除x

q5:將 x * 5放入q5,從q5中移除x

6)重複步驟4~6,知道找到第k個元素

class solution {

public:

int getuglynumber_solution(int index) {

if(index<1) return 0;

int minval;

queueq2,q3,q5;

q2.push(1);

for(int i=0;i

劍指Offer 醜數

我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 如果p是醜數,那麼p 2 x 3 y 5 z 那麼只要賦予x,y,z不同的值就能得到不同的醜數。如果要順序找出醜數,要知...