面試題 醜數

2021-08-15 07:42:42 字數 961 閱讀 7551

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

思路:先來乙個由定義得到的演算法,再看看有沒有優化空間。

bool isugly(int number)

while(number%2==0)

number/=2;

while(number%3==0)

number/=3;

while(number%5==0)

number/=5;

return (number==1)?true:false;

那麼這個演算法,從1開始算第1500個醜數也沒難度了。

但是,重複計算和一眼看出來就不可能是醜數的也計算在內了。那麼更好的方法呢?

看下面**:

int getuglynumber_solution2(int index)

if(index<=0)

return 0;

int *puglynumbers=new int[index] ;

puglynumbers[0]=1;

int nextuglyindex=1;

int *pmultiply22=puglynumbers;

int *pmultiply3=puglynumbers;

int *pmultiply5=puglynumbers;

while(nextuglyindex

int ugly=puglynumbers[nextuglyindex-1];

delete puglynumbers;

return ugly;

int min(int number1,int number2,int number3)

int min=(number1

min=(min

return min;

面試題34 醜數

題目 我們把只包含因子2,3,和5的數稱作醜數 ugly number 求按從小到大的順序的第1500個醜數。例如6,8都是醜數,但14不是,因為它包含因子7,習慣上我們把1當做第一醜數。思路 1,傳統方法,乙個數乙個數判斷 2,第一種方法效率太低,主要是不是醜數也需要花費時間進行判斷。我們可以把醜...

面試題38 醜數

題目 我們把只包含因子2,3和5的數稱作醜數。求按從小到大的順序的第1500個醜數。例如6,8是醜數,14不是醜數。習慣上我們把1當作第乙個醜數。邊界條件及異常 index小於等於0。思路 下乙個醜數肯定是前面某乙個醜數uglynumbers mult2index 乘以2,某乙個醜數uglynumb...

面試題49 醜數

題意 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 暴力每個數,判斷是不是醜數,直到找到第n個醜數。這個有點慢,不考慮 不能暴力所有數,我們考慮暴力醜數。假設陣列...