剑指offer-33-丑数

丑数_牛客网

https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?tpId=13&tqId=11186&tPage=2&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

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

这道题目自己是有思路的,丑数能够分解成2^x3^y5^z,
所以只需要把得到的丑数不断地乘以2、3、5之后并放入他们应该放置的位置即可,
而此题的难点就在于如何有序的放在合适的位置。
1乘以 (2、3、5)=2、3、5;2乘以(2、3、5)=4、6、10;3乘以(2、3、5)=6,9,15;5乘以(2、3、5)=10、15、25;
从这里我们可以看到如果不加策略地添加丑数是会有重复并且无序,
而在2x,3y,5z中,如果x=y=z那么最小丑数一定是乘以2的,但关键是有可能存在x》y》z的情况,所以我们要维持三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,要把相应的指针+1;因为这个指针会逐渐遍历整个数组,因此2、5,而是在需要的时候乘以3、5.

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

小白刷剑指offer 文章被收录于专栏

跟着小白一起刷剑指offer,通过讨论加深印象吧~ 没有人不学习就能够掌握知识,知识就是需要学习的~

全部评论
神脑袋,顺着代码代入参数走一遍才明白是在干什么。大神
3 回复 分享
发布于 2020-03-18 10:16
我给一个Python 版本的解答吧 class Solution: def GetUglyNumber_Solution(self, index): # write code here if index <= 0: return 0 p2 = p3 = p5 = 0 result = [1] for i in range(1, index): min1 = min(result[p2]*2, result[p3]*3, result[p5]*5) result.append(min1) if result[i] == result[p2]*2: p2 = p2 + 1 if result[i] == result[p3]*3: p3 = p3 + 1 if result[i] == result[p5]*5: p5 = p5 + 1 return result[-1]
1 回复 分享
发布于 2020-02-02 20:10
这也太牛了
点赞 回复 分享
发布于 2021-03-10 16:13
点赞 回复 分享
发布于 2021-03-09 16:52
好难啊,看不太懂
点赞 回复 分享
发布于 2020-09-07 10:53
为什么最后输出是result[index-1],而index不可以呢
点赞 回复 分享
发布于 2020-08-13 12:50
请问8是丑数怎么理解?
点赞 回复 分享
发布于 2020-08-05 16:23
叹为观止!
点赞 回复 分享
发布于 2020-07-31 11:33
什么都不说了,直接鼓掌吧👏👏👏👏👏👏
点赞 回复 分享
发布于 2020-07-02 11:10
好强啊 ! 好聪明,,,,
点赞 回复 分享
发布于 2020-06-21 11:42
好动态规划
点赞 回复 分享
发布于 2020-06-03 20:42
咋这吗牛逼呢,我怎吗想不到
点赞 回复 分享
发布于 2020-02-22 23:06
这怎么想到的是动态规划吗
点赞 回复 分享
发布于 2020-02-13 02:19

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
评论
176
8
分享

创作者周榜

更多
牛客网
牛客企业服务