劍指offer 面試題49 醜數 C 版本

2021-08-20 16:21:55 字數 1102 閱讀 6625

總結的部分題目思路與**,待完善。

【劍指offer-第二版】部分題目與解答【c++版本】

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

1.首先要理解醜數的概念。換個角度理解,因為醜數只能被2,3,5整除。也就是說,如果乙個數能被2整除,就繼續除以2,能被3整除,就繼續除以3,能被5整除,就繼續除以5。這樣到最後得到的結果是1,那麼這個數就是乙個醜數。

2.根據醜數的定義,乙個醜數應該是另乙個醜數乘上2,3,5的結果(1除外)。

3.採用空間換時間的方法。建立乙個陣列來按從小到大的順利記錄已經找到的醜數。生成陣列的下乙個醜數,那麼該醜數必定是陣列中的某乙個醜數乘2,3或者5生成的。記錄乙個t2,t2是陣列中已有的乙個數,排在它前面的每乙個醜數乘以2得到的結果都會小於等於已知的最大的醜數,t2是第乙個乘2大於陣列中最大的醜數的那個數。同樣記錄乙個t3和t5。

4.那麼要新增到陣列中的下乙個醜數就是t2×2,t3×3,t5×5中最小的那乙個。

5.按照這個思路向陣列中新增醜數,直到找到需要的那個醜數為止。

//與原書略不同的實現方法

//原書使用指標來爬,效率應該是更好的

#include

#include

#include

#include

#include

using

namespace

std;

int getuglynum(int index)

; //初始化t2,t3,t5為1

int t2 = 1,t3 = 1,t5 = 1;

//while(uglynum.size() != index)

return uglynum[index-1];

}int main()

return

0;}

劍指offer 面試題49 醜數

我們把只包含因子2 3 和 5 的數稱作醜數 ugly number 求按照從小到大的順序的第1500個醜數。例如,6 8都是醜數,但是14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。有空再補上 public class 49 uglynumber return uglynumbers i...

《劍指offer》面試題49 醜數

設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12 思路 思路1 從1開始遞增,依次判斷每個數是否是醜數,不夠高效 思路2 思路1之所以效率低,比較關鍵的一點是遍歷的每乙個數字都進行醜數判斷。思路2不是去判斷醜數,而是計算出醜數 因...

劍指offer 面試題49 醜數

面試題 劍指offer 題目解答 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。首先我們能想到的方法就是,迴圈遍歷,對每乙個數字進行判斷,如果是醜數那麼數量加一,直到等...