劍指offer 醜數

2021-10-01 11:14:08 字數 761 閱讀 4670

題目描述:

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

分析:只能被2、3、5整除是指如果乙個數能被2整除,則一直除以2,得到的結果為1。

思路1:直觀的從小到大對每個數進行判斷,直到找到第n個醜數字置。但是時間複雜度太高,會超時

class

solution

return i;

}bool

isugly

(int n)

};

思路2:在已經獲得前面醜數的基礎上獲得後面的醜數,減少了很多沒用的計算。題目要求獲得第n個醜數,按照從小到大的順序排列,則後面的醜數一定能夠通過前面的醜數*2,*3,5得到,所以需要遍歷前面已經得到的排好序的醜數,分別對應2,*3,5,找到第乙個比當前最大醜數大一點的新醜數,這個新醜數一定是通過前面某乙個醜數2,*3,*5得到的,所以只需要比較這三種得到方式得到的醜數,即可得到下乙個醜數。

class

solution

int ugly=pugly[nextugly-1]

;delete

pugly;

return ugly;

}int

min(

int number1,

int number2,

int number3)

};

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

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...