第n小的醜數

2021-10-05 06:57:51 字數 842 閱讀 3762

挑戰

獲得乙個醜數很容易,因為醜數可以通過 2x * 3y * 5z 獲得,同時任意醜數乘以 2、3、5 也是乙個醜數。

但是如何獲得第 n 小的醜數呢?

當 n 小於等於 6 時,第 n 小的醜數就是 n 本身;但 n 大於 6 時,需要通過前 6 個已知的醜數,從第 7 小的醜數開始計算,一直計算到第 n 小的醜數就能得到結果。

因為任意醜數乘以 2、3、5 也是乙個醜數,所以從最小的醜數 1 開始依次乘以 2、3、5 直到恰好大於第 n - 1 的醜數為止*(拿求第 7 小的醜數舉例,會得到 [ 8,9,10])* ,從中取最小值 8 就是第 7 小的醜數;重複上述步驟,一直求到 n 就可以找到第 n 小的醜數。

**如下

public

static

intnthuglynumber

(int n)

list

uglys =

newarraylist

();for

(int i =

1; i <=

6; i++

)int p2 =

3, p3 =

2, p5 =1;

for(

int i =

6; i < n; i++

)return uglys.

get(n -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...

求第N個醜數

原問題描述 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。這個題不是很難,基本上看完題就能想出解法,但是要想出時間複雜度為o n 的解法還是有點難度的。我最開始的解法時...