劍指offer 醜數

2021-08-27 11:47:29 字數 872 閱讀 6045

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

由醜數的定義可以推斷,所有的醜數都是由比它小的其他醜數乘以2,3,5得到的,第乙個醜數為1,1乘以2,3,5可以得到第二個醜數為2,再由2推得之後的其他醜數。對於之前乘以2的所有醜數來說,必定存在乙個醜數,在該醜數之前的數乘以2會小於等於最新的醜數,在它之後的醜數乘以2會大於最新的醜數,找個該醜數的位置並將其儲存在num2中,同理可得num3,num5。在得到乙個新的醜數之後對num2,num3,num5進行更新。

class solution ;

int count = 1;

int num2 = 0;

int num3 = 0;

int num5 = 0;

int ugly = 1;

if(index == 0)

return

0; for(int i = 1; iint temp2 = uglynum[num2] * 2;

int te*** = uglynum[num3] * 3;

int temp5 = uglynum[num5] * 5;

ugly = min(temp2,min(te***,temp5));

uglynum.push_back(ugly);

if(temp2 == ugly)

num2++;

if(te*** == ugly)

num3++;

if(temp5 == ugly)

num5++;

}return ugly;

}};

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...

劍指Offer 醜數

我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...