每日一题之AcWing 62.丑数
题目链接:AcWing 62. 丑数
¶一、题解
题目大意:
只包含2,3,5质因子的数,称之为丑数,求第 n 个丑数的值!
思路:
假设有一个序列是丑数序列,我们将其中2的倍数,3的倍数,5的倍数抽取出来得到三个序列!
那么原序列的取值一定是1和这三个序列的并集!
因此丑数序列的每一个取值一定可以由这三个序列得到!
我们使用三个指针分别指向三个序列的开始,那么下一项的取值一定是三个序列中最小的一个,取完值后对应指针后移即可!
那三个序列的取值一定可以由已知的丑数序列通过乘2,乘3,乘5得到!
不好理解的地方在于三个指针的移动?
三个指针都处在已得到序列之前的某个位置,只有该位置的数乘以对应的2,3,5才可以且该结果在三个结果中最小,该指针才会后移!
三个指针是否会越界?
自然不会,由于丑数序列下标每次必增加1,而三个序列的指针却不一定增加1,因此一定不会越界!
注意:
由于三个序列可能会有重复,即可能同时是几个数的倍数!因此我们遇到相同时,指针一定要同时后移!
时间复杂度: O(n)
空间复杂度: O(n)
¶二、AC代码
参考代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论