編寫乙個程式,找出第 n 個醜數。
醜數就是只包含質因數 2, 3, 5 的正整數。
示例:輸入: n = 10
輸出: 12
解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。
說明:
1 是醜數。
n 不超過1690。
題目鏈結 :
解題思路:
任意乙個醜數一定是另乙個醜數乘以2或3或5得到的,我們可以使用乙個陣列將已經確認為醜數的數按照從小到大的順序記錄下來,每個醜數都是前面的醜數乘以2、3或5得來的。
如何確保陣列中的醜數是排好序的?假設陣列中已經有若干個排好序的醜數,並且其中最大的醜數為m。那麼下乙個醜數一定是陣列中某個數乘以2或3或5的結果,所以我們把陣列中的每個數都乘以2,找到第乙個大於m的結果m2(小於等於m的結果肯定已經在陣列中了,不需要考慮);同理,把陣列中的每個數都乘以3,找到第乙個大於m的結果m3;把陣列中的每個數都乘以5,找到第乙個大於m的結果m5。那麼下乙個醜數一定是m2、m3、m5當中的最小值。
實際上,在尋找m2、m3、m5的過程中,不需要每次都從頭開始遍歷,只要記住上一次遍歷到的位置,繼續往後遍歷即可。
參考:
class solution
public int nthuglynumber(int n)
return arr[n - 1];
}}
找出第n個醜數
問題描述 設計乙個演算法,找出只含素因子2,3,5 的第 n 小的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12 樣例如果n 9,返回 10 挑戰要求時間複雜度為o nlogn 或者o n 注意事項 我們可以認為1也是乙個醜數 方法一 可以遍歷每乙個數,當它是醜數時,計數加1,直到它...
返回第n個醜數
把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。解法1 判斷某個數是否為醜數,連續找到第n個醜數 include using namespace std bool ...
找到第N個醜數
把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。找到第n個醜數 方法1 存放num之前所有元素是否是醜數的flag int getuglynumber solution in...