找到对应的第几个丑数

题目链接:丑数_牛客题霸_牛客网 (nowcoder.com)

题解参考:题目解题思路

第一种思路,丑数必然是前面丑数的想乘得到的,所以用不同的数组对2,3,5进行计数,首先除了1之外,接下来应为2,3,4,5,6,8,接下来根据丑数的个数,对丑数数组中进行添加。

# -*- coding:utf-8 -*-
class Solution:
    def GetUglyNumber_Solution(self, index):
        # write code here
        if index<1:#如果是小于零的数,直接输出0
            return 0
        num_ug=1
        ugly_arr=[1]
        t2=t3=t5=0
        if index==1:#如果是第1个,那么这个数就是1
            return 1
        while num_ug<index:#如果是大于1的个数,那么根据2,3,5倍数来进行筛选并输入
             minnum=min(ugly_arr[t2]*2,ugly_arr[t3]*3,ugly_arr[t5]*5)
             ugly_arr.append(minnum)
             while ugly_arr[t2]*2<=minnum:
                 t2+=1
             while ugly_arr[t3]*3<=minnum:
                 t3+=1
             while ugly_arr[t5]*5<=minnum:
                 t5+=1
             num_ug+=1
        return ugly_arr[num_ug-1]

解法2:对于范围内的丑数全部排列,然后根据序号找到对应数字,不过这里可能占用空间会比较大

class Solution:
    def GetUglyNumber_Solution(self, index):
        # write code here
        res=[2**i*3**j*5**k  for i in range(30)  for j in range(20)   for k in range(15)]
        res.sort()
        return res[index-1] if index else 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值