//一次复习了三道 循序渐进

class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
vector<int> ivec(n, 0);
int primes_size = primes.size();
vector<int> point_to_primes(primes_size, 0);
ivec[0] = 1;
for(int i = 1; i != n; ++i) {
int min = INT_MAX;
for(int j = 0; j != primes_size; ++j)
if(min >= primes[j] * ivec[point_to_primes[j]])
min = primes[j] * ivec[point_to_primes[j]];
ivec[i] = min;
for(int j = 0; j != primes_size; ++j)
if(ivec[i] == primes[j] * ivec[point_to_primes[j]])
++point_to_primes[j];
}
return ivec[n - 1];
}
};

 

 

/*********************************************************************/

class Solution {
public:
int nthUglyNumber(int n) {
int n2 =0, n3 = 0, n5 = 0;
if(n <=0)
return 0;
vector<int> ivec(n, 0);
ivec[0] = 1;
for(int i = 1; i < n; ++i) {
ivec[i] = min(ivec[n2] * 2, min(ivec[n3] * 3, ivec[n5] * 5));
if(ivec[i] == ivec[n2] * 2)
++n2;
if(ivec[i] == ivec[n3] * 3)
++n3;
if(ivec[i] == ivec[n5] * 5)
++n5;
}
return ivec[n - 1];
}
};

/*********************************************************************/

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

posted on 2017-10-15 22:21  bloomingFlower  阅读(127)  评论(0编辑  收藏  举报