劍指offer 33 醜數 C

2021-10-25 02:03:55 字數 667 閱讀 7257

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

首先我們明確 醜數能夠分解成2^x3^y5^z,

所以只需要把得到的醜數不斷地乘以2、3、5之後並放入他們應該放置的位置即可,

而此題的難點就在於如何有序的放在合適的位置。

1乘以 (2、3、5)=2、3、5;2乘以(2、3、5)=4、6、10;3乘以(2、3、5)=6,9,15;5乘以(2、3、5)=10、15、25;

從這裡我們可以看到如果不加策略地新增醜數是會有重複並且無序,

而在2x,3y,5z中,如果x=y=z那麼最小丑數一定是乘以2的,但關鍵是有可能存在x>=y>=z的情況,所以我們要維持三個指標來記錄當前乘以2、乘以3、乘以5的最小值,然後當其被選為新的最小值後,要把相應的指標+1;因為這個指標會逐漸遍歷整個陣列,因此最終陣列中的每乙個值都會被乘以2、乘以3、乘以5,也就是實現了我們最開始的想法,只不過不是同時成乘以2、3、5,而是在需要的時候乘以2、3、5.

class solution 

int getuglynumber_solution(int index)

return res[index - 1];

}};

《劍指offer》33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。c 實現 class solution return a index 1 python實現 coding utf 8 cl...

劍指offer 33 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。通俗易懂的解釋 首先從醜數的定義我們知道,乙個醜數的因子只有2,3,5,那麼醜數p 2 x 3 y 5 z,換句話說乙個醜...

劍指offer33 醜數

題目描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。這裡講解的很詳細了。coding utf 8 class solution def getuglynumber ...