#include <vector> class Solution { public: int GetUglyNumber_Solution(int index) { if(!index) return 0; //只包含质因数为2、3、5的数,求第n个丑数 //逆向思维 vector<int> ans(index + 2); int f1 = 1, f2 = 1, f3 = 1; ans[1] = 1; for(int i = 2; i <= index; i++){ ans[i] = min(ans[f1] * 2, min(ans[f2] * 3, ans[f3] * 5)); if(ans[f1] * 2 == ans[i]) f1++; if(ans[f2] * 3 == ans[i]) f2++; if(ans[f3] * 5 == ans[i]) f3++; } return ans[index]; } };