*題目:我們把只包含因子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 ...