您的位置:首页 > 其它

LintCode 4:Ugly Number II

2017-09-05 15:02 489 查看
Description:

Ugly number is a number that only have factors 2, 3 and 5.

Design an algorithm to find the nth ugly number. The first 10 ugly numbers are 1, 2, 3, 4, 5, 6, 8, 9, 10, 12

Note:

1.根据剑指offer中的思想,用一个数组来记录所有得到的丑数,用T2来存储最大的乘以2以后的数组下标,T3、T5以此类推。这样更新下一个丑数,只用比较ugly[T2]*2,ugly[T3]*3,ugly[T5]*5这三个数就可以。注意:当发生新产生的丑数与前一个相等情况时,丑数不更新,对应的T要更新。

2.由于新开了动态空间,记得用完要析构。

Code:

class Solution {
public:
/*
* @param n: An integer
* @return: the nth prime number as description.
*/
int nthUglyNumber(int n) {
// write your code here
int* ugly = new int
;
ugly[0] = 1;
int T2 = 0;
int T3 = 0;
int T5 = 0;
int i = 1;
while (i < n) {
// cout << i-1 << " " << ugly[i-1] << endl;
if (ugly[T2] * 2 <= ugly[T3] * 3 && ugly[T2] * 2 <= ugly[T5] * 5) {
if (ugly[i - 1] != ugly[T2] * 2) {
ugly[i] = ugly[T2] * 2;
i++;
}
T2++;
}
else if (ugly[T3] * 3 <= ugly[T2] * 2 && ugly[T3] * 3 <= ugly[T5] * 5) {
if (ugly[i - 1] != ugly[T3] * 3) {
ugly[i] = ugly[T3] * 3;
i++;
}
T3++;
}
else if (ugly[T5] * 5 <= ugly[T3] * 3 && ugly[T5] * 5 <= ugly[T2] * 2) {
if (ugly[i - 1] != ugly[T5] * 5) {
ugly[i] = ugly[T5] * 5;
i++;
}
T5++;
}
}
int result = ugly[n-1];
delete ugly;
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: