剑指offer49丑数
Posted shiganquan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer49丑数相关的知识,希望对你有一定的参考价值。
题目
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路
显然每个数判断不可取,计算量超级大。
我们要用前面的丑数来生成后面的丑数
从1开始,记三个指针t1,t2,t3,都指向1。
每次将t1,t2,t3所指数字分别乘上2,3,5,取最小的一个生成下一个丑数,并且将对应指针指向新生成的丑数
反复操作即可
(实际代码过程中,使用索引代替指针)
class Solution { public: int GetUglyNumber_Solution(int index) { if (index < 7) return index; vector<int> res(index); res[0] = 1; int t2 = 0, t3 = 0, t5 = 0, i; for (i = 1; i < index; ++i) { res[i] = min(res[t2] * 2, min(res[t3] * 3, res[t5] * 5)); if (res[i] == res[t2] * 2) t2++; if (res[i] == res[t3] * 3) t3++; if (res[i] == res[t5] * 5) t5++; } return res[index - 1]; } };
以上是关于剑指offer49丑数的主要内容,如果未能解决你的问题,请参考以下文章