挑戰獲得乙個醜數很容易,因為醜數可以通過 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 的解法還是有點難度的。我最開始的解法時...