把只包含質因子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...