面試題49 醜數

2022-03-03 20:05:23 字數 928 閱讀 4131

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

解題思路

上**(c++香)

法一:暴力列舉法(超時)

#define maxn 10010

#define maxnn 0xfffffff

// 判斷是否是素數

bool isprime(int num)

return true;

}// 先求出一部分素數,陣列下標為素數標記

void primecache(int num)

}// 先求出一部分素數,陣列值為素數標記

void primecacheplus(int num)

}bool isuglynum(int prime, int num)

return true;

}int getuglynumber_solution(int index)

}}

法二:暴力列舉法(超時,但這樣的做法更妙)
bool isugly(int number)

// 這樣也會超時

int getuglynumber_solutionplus(int index)

return number;

}

法三:空間換時間,儲存已計算的醜數,並通過已計算的醜數**未來的醜數(ac)
int mymin(int number1, int number2,int number3)

int getuglynumber_solution(int index)

return puglynumbers[index - 1];

}

面試題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個醜數。考察點 時間複雜度的理解 需求了解。思路 這道題最簡單的想法是寫乙個判斷是不是醜數的函式,然後從小到大以此遍歷,直到找到第...