0
点赞
收藏
分享

微信扫一扫

32、丑数


题目描述:

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

解题思路:

  • 根据丑数的定义,我们可以知道丑数可以由另外一个丑数乘以2,3或者5得到。因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2,3或者5得到的。
  • 我们把当前的丑数(从第一个开始)乘以2,3,5以后得到的结果记为M2,M3和M5。那么当前丑数的后一个丑数应该是M2,M3和M5当中的最小值:Min(M2,M3,M5)。定义三个指针,代表了2,3,5分别指向指向的丑数。
  • 移动最小值所在的乘数(2,3,5)的指针。

32、丑数_M3

Demo:

class Solution {
public:
    int GetUglyNumber_Solution(int index) {
        if (index <= 6)
            return index;
        int p2 = 0, p3 = 0, p5 = 0, num = 1;
        vector<int> arr;
        arr.push_back(num);
        while (arr.size() < index)
        {
            int num = min(2*arr[p2], min(3*arr[p3], 5*arr[p5]));
            if (num == 2 * arr[p2]) p2++;
            if (num == 3 * arr[p3]) p3++;
            if (num == 5 * arr[p5]) p5++;
            arr.push_back(num);
        }
        return arr[index-1];
    }
};


举报

相关推荐

0 条评论