第一種:沒有看其他解法,自己寫的解法:
1.寫乙個無限迴圈,然後如果當前數是醜數,則count++;
2.如果count == n;則湊齊了n個醜數,返回
3.如果當前數不在醜數集合中(初始化為[1, 2, 3, 5]);
4.如果當前醜數大於6,則需要判斷,如果這個數的約數只有1和他本身,則這個數不是醜數
5.進行拆分,判斷這個數的約數是否為醜數,如果有不為醜數的輸入false,進入1,否則將這個數放到醜數集合中進行1
// 迭代判斷乙個數是否為醜數
const isuglynum = function(n, arr) else if (n > 6)
}if (sum == 2)
for (var i = 1; i < n; i++) }}
arr.push(n);
}return true;
}/**
* 判斷乙個是否為醜數
* @param n
*/const getnuglynum = function(n)
// 判讀i和i的約數是是否為醜數
if(isuglynum(i, arr))
}console.log(all);
}
第二種:標準解法,簡言之醜數解釋2, 3, 5的組合數,根據從小到大,組合這幾個數就可以了
var getuglynum = function (index)
return uglynum[index - 1];
}
leetcode 264 醜數2的最小堆解法
編寫乙個程式,找出第 n 個醜數。醜數就是只包含質因數 2,3,5 的正整數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數最小堆的方式思考方式,之前自己有點繞不過來,不知道該怎麼解。也不理解為什麼會用到堆,和為什麼會用到最小堆來解決問題。下面...
醜數的求解
題目 我們把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。思路 如果能夠根據已經計算好的醜數,計算出下乙個醜數就可以避免這種情況,實現從醜數到醜數的高效演算法,根據定義...
醜數的求法
把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。class solution public int getuglynumber solution int index if...