传送门
nowcoder
leetcode
题目描述
把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。例如:6、8 都是丑数,但 14 不是,因为它包含质因子 7。 习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。
C++ 代码 - nowcoder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
class Solution { public: int GetUglyNumber_Solution(int index) { if (index <= 6) return index;
vector<int> f(index + 1, 0); f[1] = 1; int i2 = 1, i3 = 1, i5 = 1; for (int i = 2; i <= index; i ++) { int minNum = min(min(f[i2] * 2, f[i3] * 3), f[i5] * 5); if (minNum == f[i2] * 2) i2 ++; if (minNum == f[i3] * 3) i3 ++; if (minNum == f[i5] * 5) i5 ++; f[i] = minNum; }
return f[index]; } };
|
C++ 代码 - leetcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
class Solution { public: int nthUglyNumber(int n) { if (n <= 6) return n;
vector<int> f(n + 1); f[1] = 1; int p2 = 1, p3 = 1, p5 = 1; for (int i = 2; i <= n; i ++) { int minVal = min(min(f[p2] * 2, f[p3] * 3), f[p5] * 5); f[i] = minVal; if (f[i] == f[p2] * 2) p2 ++; if (f[i] == f[p3] * 3) p3 ++; if (f[i] == f[p5] * 5) p5 ++; }
return f[n]; } };
|