264. Ugly Number II

首先是 263. Ugly Number
Write a program to check whether a given number is an ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 6, 8 are ugly while 14 is not ugly since it includes another prime factor 7.

Note that 1 is typically treated as an ugly number.

丑数就是质因数只有2,3,5的数。

class Solution {
public:
    bool isUgly(int num) {
        if(num<=0)return false;
        while(num%2==0){
            num/=2;
        }
        while(num%3==0){
            num/=3;
        }
        while(num%5==0){
            num/=5;
        }
        if(num==1)return true;
        else return false;
    }
};

然后题目264 就是求第N个丑数是什么
Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number.

如果利用题目263的代码,一个个的自然数来判断,肯定是会超时的。
我们可以利用动态规划的思想,第i个丑数一定是前面某一个数乘以2,3,5中的一个数的结果。
思路就是每得到一个数就把它分别乘以2,3,5,然后求出得到的三个值中最小的,它就是下一个丑数。

class Solution {
public:
    int nthUglyNumber(int n) {
        vector<int>a(n);
        int t2=2,t3=3,t5=5;
        int i2=0,i3=0,i5=0;
        a[0]=1;
        for(int i=1;i<n;i++){
            a[i]=min(min(t2,t3),t5);
            if(a[i]==t2) t2=a[++i2]*2;
            if(a[i]==t3) t3=a[++i3]*3;
            if(a[i]==t5) t5=a[++i5]*5;
        }
        return a[n-1];
    }
};

你可能感兴趣的:(264. Ugly Number II)