刷題劍指offer 醜數

2021-09-30 13:43:55 字數 555 閱讀 6055

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

思路:1、逐個判斷每個整數是不是醜數,直觀但不夠高效,這樣對於每乙個數不管是不是醜數我們都要進行計算。

2、根據醜數的定義,醜數應該是另乙個醜數乘以2、3、5的結果(1除外),因此我們可以建立乙個陣列,裡面的數字都是排好序的醜數,每乙個醜數都是前面的醜數乘以2、3、5得到的。這種思路的關鍵在於怎樣確保陣列中的醜數是排好序的,假設陣列中已經有若干個醜數排好序後存放在陣列中,並且把已有最大的醜數記為m,我們接下來分析如何生成下乙個醜數。因為已有的醜數都是排好序的,對於乘於2而言肯定存在乙個醜數t2,排在它前面的每乙個醜數乘以2得到的結果都會小於已有的最大醜數,排在它之後的每乙個醜數乘以2得到的結果都會太大。我們記下這個醜數的位置就可以了,同時每次生成新的醜數的時候,去更新這個t2。對於乘以3、5都一樣。

**:

int getuglynumber_solution(int index)

劍指刷題 求醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。醜數序列 1 2,3,4,5,6,8,9,10,12,15,16,18,20,24,25 第一種解題 思路,將每個醜數算出...

劍指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...