题目链接:丑数_牛客题霸_牛客网 (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