把只包含因子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整除,如果乙個數能被...