面试题49:丑数

作者: 不会编程的程序猿甲 | 来源:发表于2020-03-27 23:15 被阅读0次

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

思路:
以空间来换取时间效率,用一个辅助数组res来保存从小到大的丑数,为了只计算丑数,采取的策略为:假设已经有排好序的数,那么一定存在一个t2位置的元素乘以2大于当前的最大值,而之前的都小于当前的最大值,记录该位置,同理记录t3和t5的位置,下一个丑数就是者三个数中的最小数,依次计算直到需要计算的索引为止。

49 丑数.png

代码实现:

# -*- coding:utf-8 -*-
class Solution:
    def GetUglyNumber_Solution(self, index):
        if index <= 0:
            return 0
        #初始化
        res = [1]         #第一个丑数是1
        nextindex = 1     #初始化下一个丑数的索引
        t2 = t3 = t5 = 0  #初始化索引

        #循环
        while nextindex < index:
            min_val = min(res[t2]*2,res[t3]*3,res[t5]*5)
            res.append(min_val)
            #计算下一个大于当前min_val的t2*2
            while res[t2]*2 <= min_val:
                t2+=1
            #计算下一个大于当前min_val的t3*3
            while res[t3]*3 <= min_val:
                t3+=1
            #计算下一个大于当前min_val的t2*2          
            while res[t5]*5 <= min_val:
                t5+=1
            nextindex +=1    #索引更新
        #返回
        return res[nextindex-1]

提交结果:

相关文章

  • golang实现剑指offer:动态规划题型

    丑数 LeetCode 面试题49:丑数 题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Nu...

  • 面试题49:丑数

    题目描述: 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它...

  • 面试题49:丑数

    把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7...

  • 面试题49:丑数

    题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质...

  • 面试题49:丑数

    题目 我们把只包含2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如,6...

  • 剑指offer第二版-49.丑数

    本系列导航:剑指offer(第二版)java实现导航帖 面试题49:丑数 题目要求:我们把只包含因子2,3,5的数...

  • 面试题49_丑数

    题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个...

  • 面试题49. 丑数

    丑数 题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 ...

  • 面试题49. 丑数

    题目 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数...

  • 49丑数

    我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8...

网友评论

    本文标题:面试题49:丑数

    本文链接:https://www.haomeiwen.com/subject/ycdduhtx.html