python 醜數 劍指offer

2021-08-21 13:51:19 字數 455 閱讀 8590

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

思路:

最直接的暴力解法是從1開始依次判斷數字是否為醜數,直到達到要求的醜數個數。當然這種方法肯定是會tle的,所以我們分析一下醜數的生成特點(這裡把1排除):

因為醜數隻包含質因子2,3,5,假設我們已經有n-1個醜數,按照順序排列,且第n-1的醜數為m。那麼第n個醜數一定是由這n-1個醜數分別乘以2,3,5,得到的所有大於m的結果中,最小的那個數。

事實上我們不需要每次都計算前面所有醜數乘以2,3,5的結果,然後再比較大小。因為在已存在的醜數中,一定存在某個數t2t2,在它之前的所有數乘以2都小於已有醜數,而t2×2t2×2的結果一定大於m,同理,也存在這樣的數t3,t5t3,t5,我們只需要標記這三個數即可。

劍指offer 醜數 python

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

劍指offer 醜數 (Python)

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。題目鏈結 因為新增的大的醜數一定小的醜數乘以2,3,5得到的值最小的乙個。coding utf 8 class solut...

劍指offer 醜數

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...