醜數的求解

2021-07-01 18:57:32 字數 1062 閱讀 4032

*題目:我們把只包含因子2、3和5的數稱作醜數(ugly number)。

例如6、8都是醜數,但14不是,因為它包含因子7。

習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。

思路:如果能夠根據已經計算好的醜數,計算出下乙個醜數就可以避免這種情況,實現從醜數到醜數的高效演算法,根據定義可知,後面的醜數肯定是前面已知醜數乘以2,

3,5得到的。

我們假設乙個陣列中已經有若干醜數,並且這些醜數是按順序排列的,我們把現有的最大醜數記為

max,則下乙個醜數肯定是前面醜數乘以2,

3,5得到的。不妨考慮乘以

2得到的情況,我們把陣列中的每乙個數都乘以

2,由於原陣列是有序的,因為乘以

2後也是有序遞增的,這樣必然存在乙個數

m2,它前面的每乙個數都是小於等於

max,而包括

m2在內的後面的數都是大於

max的,因為我們還是要保持遞增順序,所以我們取第乙個大於

max的數

m2。同理對於乘以

3的情況,可以取第乙個大於

max的數

m3,對於乘以

5的情況,可以取第乙個大於

max的數m5。

最終下乙個醜數取

:min

即可:

**如下:

#include #include #include int min(int a,int b,int c)

int getuglynum(int index)

int *puglynumber=null;

puglynumber=(int *) malloc(index*sizeof(int));

if (puglynumber==null)

puglynumber[0]=1;

int nextnumber=1;

int *puglynumber2=puglynumber;

int *puglynumber3=puglynumber;

int *puglynumber5=puglynumber;

while(nextnumber

java 求解第n個醜數

題目 我們把只包含因子2,3和5的數稱為醜數 ugly number 求從小到大的順序第n的醜數,例如6,8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當作第1個醜數 第一種解法 最簡單粗暴野蠻也是效率最低的一種解法是 public class solution return i publ...

醜數的求法

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

leetcode 263 醜數(醜數II)

給了我們乙個醜數的概念,真是為了考驗我們什麼手段都能使出來。首先說一下第乙個題目,判斷乙個數是不是醜數,就是不斷地去除5 除3 除2就行了,當然除之前看看餘數是不是0,否則的話說明已經不能被這三個數整除了,直接結束 public boolean isugly int num return flag ...