题目链接
若一个数只包含质因子2,3,5,且不包含其他质因子(如7),则这个数为丑数
输入n,求第n个丑数
从1开始检查每一个数是否是丑数,直到已经发现n个丑数
判断一个数是否为丑数:
当这个数还是2的倍数时,不断除以2,并对因子3和5重复这一步骤
检查最后得到的结果是否是1,是1说明该数是丑数,不是1说明该数还有其他质因子,不是丑数
由于丑数一定是由另一个丑数乘2/3/5得到,因此可以维护一个丑数集dst
,不断对其中的数字乘2/3/5,生成新的丑数
初始状态下,丑数集中只有一个dst[0]=1
设置i,j,k
三个指针,分别指向【用来乘2/3/5生成下一个丑数的数】,初始时ijk都指向下标0
循环生成丑数,直到生成n个丑数:
- 取
dst[i]*2
,dst[j]*3
,dst[k]*5
的最小值
,即为本次生成的新丑数,加入dst中 - 若本次生成的丑数为dst[i]*2,则
i++
- 若为dst[j]*3,则
j++
- 若为dst[k]*5,则
k++
class Solution:
def GetUglyNumber_Solution(self, index):
if not index:
return 0
dst = [1]
i, j, k = 0, 0, 0
while len(dst) < index:
newUgly = min(dst[i] * 2, dst[j] * 3, dst[k] * 5)
dst.append(newUgly)
i += 1 if newUgly == dst[i] * 2 else 0
j += 1 if newUgly == dst[j] * 3 else 0
k += 1 if newUgly == dst[k] * 5 else 0
return dst[-1]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)