劍指Offer 34 醜數

2021-09-11 05:53:49 字數 678 閱讀 9238

把只包含因子2、3和5的數稱為醜數,求從小到大的順序的第1500個數。1是第乙個醜數。

乙個醜數可以表示成2m3

n5

k2^m3^n5^k

2m3n5k

,其中,m、n、k為自然數zzz。

醜數從小到大的順序其實是m、n、k這三個數中的其中乙個數加一。

生成過程:

陣列res初始化,儲存了第乙個元素res[0]=1;

比較m、n、k分別加1後值的大小,將res[m]*2,res[n]*3,res[k]*5,取最小的那個數;(這裡有乙個誤區,為什麼是res[m、n、k]分別乘以2、3、5呢?因為醜數的生成實際上是前面的數選擇乘以2、3、5的過程,但在這個過程中,m、n、k的增長快慢不一樣;)

如果取得是res[m]*2,那麼m++;其他同理。

public

class

q34getuglynumber

return res[index -1]

;}private

static

intmin

(int num1,

int num2)

public

static

void

main

(string[

] args)

}}

劍指offer 34 醜數

只包含因子2 3 5的數稱為醜數。方法1 逐個判斷每個整數是不是醜數 方法2 建立陣列儲存已經找到的醜數,用空間換時間的方法 每乙個醜數都是前面的醜數乘以2 3 5得到的 已有醜數中最大醜數為m,下乙個醜數應該是已知醜數分別乘以2 3 5的第乙個大於m的數,記錄,每個乘以2 3 5第乙個大於m的位置...

劍指offer 34 醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。看到這個問題的時候可以這樣想 解題思路 因為乙個醜數隻包含質因子2 3和5,也就是說乙個醜數一定由另乙個醜數乘以2或者乘以...

《劍指offer》 34 醜數的判斷與查詢

題目 我們把只包含因子2,3,5的數稱為醜數 ugly number 求按從小到大的順序的第1500個醜數。例如6,8都是醜數,但14不是,因為它包含因子7.習慣上我們把1當作第乙個醜數。方案一 所謂乙個數m是n的因子的意思是n能被m整除。那麼根據醜數的定義,醜數只能被2,3,5整除,如果乙個數能被...