我們把只包含因子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個醜數。這個有點慢,不考慮 不能暴力所有數,我們考慮暴力醜數。假設陣列...