題目描述
包含質因子2、3和5的數稱作醜數。
例如6、8都是醜數,但14不是,因為它包含質因子7。
習慣上我們把1當做是第乙個醜數。
按從小到大的順序求第n個醜數
題目分析:
質因子包含2、3、5三個中任意乙個或者多個;而且題目明確給出1為最小的醜數;因此可以從1開始,對後面的數依次乘以2、3、5.
比如乙個陣列,最開始只有乙個元素1,建立三個索引p2、p3、p5,分別記錄乘2、乘3、乘5的位置,然後將1分別乘以2、3、5,取其中最小的乙個數,作為醜數填入陣列中,依次迴圈,直至取到第n個數。
這三個索引是關鍵,開始的時候都指向陣列0位置,即p2=p3=p5=0,每次取到的最小的數後確認是與2、3、5中哪個數字相乘得到,與2相乘得到就p2++,與3相乘得到p3++,與5相乘得到,p5++。
**如下:
#include
#include
#include
using
namespace std;
class
solution
intgetuglynumber_solution
(int index)
return rest[index -1]
;}};
intmain()
計算第N個醜數
牛客網上劍指offer上的題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。解法1 算是一種很暴力的方法,從第乙個醜數開始一次遞加,直到滿足n的要求,但是很不幸,超時...
返回第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...