您的位置:首页 > Web前端

剑指offer:丑数

2017-04-18 15:49 148 查看


题目描述

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

class Solution {
public:
//思路:后面的丑数等于前面的丑数乘2或3或5
int GetUglyNumber_Solution(int index) {
if(index == 0)
return 0;
if(index == 1)
return 1;

vector<long long> uglynum;
uglynum.push_back(1);
int iternum=1;
int t2=0, t3=0, t5=0;

while(iternum < index)
{
long long ugly2 = uglynum[t2] * 2;
long long ugly3 = uglynum[t3] * 3;
long long ugly5 = uglynum[t5] * 5;

long long min = minofthree(ugly2, ugly3, ugly5);
uglynum.push_back(min);

while(uglynum[t2] * 2 <= uglynum[uglynum.size()-1])
t2++;
while(uglynum[t3] * 3 <= uglynum[uglynum.size()-1])
t3++;
while(uglynum[t5] * 5 <= uglynum[uglynum.size()-1])
t5++;

++iternum;
}

return uglynum[index-1];
}

long long minofthree(long long a, long long b, long long c)
{
int t = (a > b) ? b:a;
int r = (t > c) ? c:t;
return r;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer 面试