牛客網劍指offer-醜數
阿新 • • 發佈:2019-02-12
題目描述
把只包含因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。class Solution { public: //利用3個佇列,分別儲存乘以2、3、5的新數,每次只需判斷每個 //佇列最前面的數哪個最小,然後取出並把這個數乘上對應的因子壓入 //三個佇列中(這裡要去重,具體看程式碼) int GetUglyNumber_Solution(int index) { if (index <= 0) return 0; --index; queue<int> q2, q3, q5; q2.push(2); q3.push(3); q5.push(5); queue<int> *p; int ans = 1; while (index) { p = q2.front() < q3.front() ? &q2 : &q3; p = (*p).front() < q5.front() ? p : &q5; ans = (*p).front(); (*p).pop(); //flag來記錄是那個佇列取出的最小數 int flag = 0; if(p == &q2) flag = 1; else if(p == &q3) flag = 2; else flag = 3; //這裡的處理是去重,q3的不再壓入q2,q5的不再壓入q3和q2 switch(flag) { case 1:q2.push(ans * 2); case 2:q3.push(ans * 3); case 3:q5.push(ans * 5); } --index; } return ans; } };