時間限制:1秒 空間限制:32768k 熱度指數:335948
本題知識點: 窮舉
把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。
所謂的乙個數m是另乙個數n的因子,是指n能被m整除,也就是n%m==0。根據醜數的定義,醜數只能被2、3和5整除。根據醜數的定義,醜數應該是另乙個醜數乘以2、3或者5的結果(1除外)。因此我們可以建立乙個陣列,裡面的數字是排好序的醜數,每乙個醜數都是前面的醜數乘以2、3或者5得到的。
這個思路的關鍵問題在於怎樣保證陣列裡面的醜數是排好序的。對乘以2而言,肯定存在某乙個醜數t2,排在它之前的每乙個醜數乘以2得到的結果都會小於已有最大的醜數,在它之後的每乙個醜數乘以乘以2得到的結果都會太大。我們只需要記下這個醜數的位置,同時每次生成新的醜數的時候,去更新這個t2。對乘以3和5而言,也存在著同樣的t3和t5。
**如下:
class solution
int t2=3,t3=2,t5=1;
for(int i=6;i=res[t2]*2)
while(res[i]>=res[t3]*3)
while(res[i]>=res[t5]*5)
} return res[index-1];
}};
劍指offer 醜數
把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 參考程式設計師面試金典 偽 如下 1 初始化array和佇列 q2 q3 q5 2 將1插入array 3 分別將1 2...
劍指Offer 醜數
我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 求按從小 到大的順序的第 1500 個醜數。例如 6 8都是醜數,但 14 不是,它包含因子 7。習慣上我們把 1當做第乙個醜數。解法一 逐一判斷是否是醜數,簡單但是不夠高效 數字n是數字m的因子說明m n 0。醜數的因子只有2...
劍指offer 醜數
把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。分析 為了保證時間達到要求,可以將所求得的醜數都儲存在陣列中,然後再取出。前面的醜數乘以2 3或5中的最小的乙個是下乙個醜數。...