class Solution {
public:
    int GetUglyNumber_Solution(int index) {
      if (index == 0) {
        return 0;
      }
      
      //  存放丑数
      std::vector<int> num;
      int count = 1;
      num.push_back(1);
      //  所有丑数都是由1乘上 2 3 5 得到的
      //  这里取最小的丑数乘上各自质因子中的最小数
      int i = 0, j = 0, k = 0;
      
      while (count < index) {
        int tmp = std::min(num[i] * 2, std::min(num[j] * 3, num[k] * 5));
        num.push_back(tmp);
        
        //  乘上相应的数之后,该位不能再乘上同一个质因子
        if (num[count] == num[i] * 2) {
          ++i;
        }
        if (num[count] == num[j] * 3) {
          ++j;
        }
        if (num[count] == num[k] * 5) {
          ++k;
        }
        
        ++count;
      }
      
      return num[count - 1];
    }
};