面試題49 醜數

2021-10-05 19:50:02 字數 593 閱讀 5821

把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。

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

考察點:時間複雜度的理解;需求了解。

思路:這道題最簡單的想法是寫乙個判斷是不是醜數的函式,然後從小到大以此遍歷,直到找到第n個醜數。

複雜度較高,所以想用提高效率。

建立乙個陣列,用空間換時間,陣列存放已經排好序的醜數,每個醜數都是前面的數字乘2或者3或者5得到的

記現有的最大醜數為m,則之前的醜數乘2得到的數中,第乙個》m 得數記作m2,同樣的存在m3,m5。

則下乙個醜數從m2,m3,m5 中的最小值得到。

但是不用每個數都要做到全部乘2去找到m2,這裡建立乙個索引index2,這個下標對應的值乘以2剛好<=m

我們每次變更2,3,5對應的index就可以簡化計算。

class solution

int getuglynumber_solution(int index)

int ugly = result[index - 1];//得到對應結果

return ugly;

}

面試題49 醜數

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

面試題49 醜數

一 暴力法 從1開始對每乙個數進行判斷,是否可以連除2,3,5得到1,效率比較低 class solution return number bool isugly int n 二 以空間換取時間的做法 思路 把每乙個醜數都列出來。醜數肯定是2,3,5的倍數,所以每乙個位置都可以乘2,3,5,找到比目...

面試題49 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。解題思路 上 c 香 法一 暴力列舉法 超時 define maxn 10010 define maxnn 0xfffff...