问题
题目:[剑指offer-丑数]
思路
参照[Ugly Number II]
主要是模仿素数筛法,发现丑数生成的规律,全部是由小的丑数×2,3,5.然后有一个merge k lists的问题。
代码
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(!index) return 0;
vector<int> ret;
ret.push_back(1);
int i2 = 0, i3 = 0, i5 = 0;
while( ret.size() < index ){
int m2 = ret[i2] * 2;
int m3 = ret[i3] * 3;
int m5 = ret[i5] * 5;
int tmp = min( m2, min(m3, m5) );
if( tmp == m2 ) ++i2;
if( tmp == m3 ) ++i3;
if( tmp == m5 ) ++i5;
ret.push_back( tmp );
}
return ret.back();
}
};