剑指offer 丑数
问题描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
C++代码实现
使用三个指针,分别表示2、3、5当前倍数的值,每次找三个中最小倍数的值
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index <= 0)
{
return 0;
}
vector<int> result(index);
result[0] = 1;
int p2 = 0, p3 = 0, p5 = 0;
for (int i = 1; i < index; i++)
{
result[i] = min(result[p2]*2, min(result[p3]*3, result[p5]*5));
if (result[i] == result[p2] * 2) p2++;
if (result[i] == result[p3] * 3) p3++;
if (result[i] == result[p5] * 5) p5++;
}
return result[index - 1];
}
};
python2代码实现
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index <= 0:
return 0
p2 = p3 = p5 = 0
result = [0] * index
result[0] = 1
for i in range(1, index):
result[i] = min(result[p2]*2, min(result[p3]*3, result[p5]*5))
if result[i] == result[p2]*2:
p2 += 1
if result[i] == result[p3]*3:
p3 += 1
if result[i] == result[p5]*5:
p5 += 1
return result[index-1]