劍指Offer 面試題34 醜數

2021-07-15 22:56:17 字數 1148 閱讀 3388

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

分析:逐個判斷整數是不是醜數,直觀但是效率低下。

根據醜數的定義,醜數只能被2、3和5整除,也就是說乙個數能被2整除,我們把它連續除以2;如果能被3整除,我們將它連續除以3;如果能被5整除,我們將它連續除以5;。如果自後得到1,那麼這個數就是醜數。

**如下:

#include#includeusing namespace std;

//判斷乙個數是否為醜數

bool isugly(int num)

int getuglynum(int index)

return temp;

}int main()

執行結果:

859963392

耗時:38017毫秒

請按任意鍵繼續. . .

注意:這種方法直觀,**簡潔,但是最大的問題就是每乙個整數都需要計算,因此效率低下。

源**如下:

#include#includeusing namespace std;

int min(int num1, int num2, int num3)//返回三個數中最小值

int getuglysolution2(int index)

int ugly = puglynumbers[nextuglyindex - 1];

delete puglynumbers;

return ugly;

}int main()

執行結果:

859963392

耗時:0毫秒

請按任意鍵繼續. . .

分析:第二種方法效率明顯提公升,但是其消耗了1500*4*1024 = 6kb的儲存空間。

劍指offer面試題 34 醜數

題目描述 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路分析 思路一 逐個判斷每個整數是不是醜數的解法,直觀但不高效 牛客網測試超時 所謂乙個數m是另乙個數n的因子,是...

劍指offer 面試題34 醜數

劍指offer 面試題34 醜數 題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 給乙個陣列存放當前已有的醜數,這些醜數都是按順序存放的,每次計算新的醜數時,...

劍指offer 面試題34 醜數

題目 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 需要注意的是,下乙個醜數可能是其中兩個或三個數衍生的,比如在生成6時,2衍生的是6,3在那個時候衍生的恰好也是6....