#我们把只包含因子2、3、5的数称为丑数,求按从小到大顺序的第1500个丑数
#思路1:暴力解法:逐个判断每个数是不是丑数--效率较低
#判断一个数是否是丑数
def isUgly(number):
while number % 2 == 0:
number /= 2
while number % 3 == 0:
number /= 3
while number % 5 == 0:
number /= 5
if number == 1:
return True
else:
return False
#顺序判断每个整数是不是丑数
def getUglyNumber(index):
if index <= 0:
return 0
number = 0
uglyFound = 0
while uglyFound < index:
number+=1
if isUgly(number):
uglyFound+=1
return number
#思路2:创建数组保存已找到的丑数,用空间换时间
#创建一个数组,从最小的丑数出发,之后的丑数都是它乘以2、3、5得到的,每次循环找到最小值存入到数组中,得到丑数排序的数组,
# 利用index2,index3,index5来表示每个数*2,*3,*5,如果ugly[index2]*2已经放入数组中,就将对应的指针指向下一个数
def findKthUgly(k):
ugly = []
ugly.append(1)
index = 1
index2 = 0
index3 = 0
index5 = 0
while index < k:
num = min(ugly[index2] * 2, ugly[index3] * 3, ugly[index5] * 5)
if ugly[index2] * 2 == num:
index2 += 1
if ugly[index3] * 3 == num:
index3 += 1
if ugly[index5] * 5 == num:
index5 += 1
ugly.append(num)
index += 1
return ugly[-1]
丑数--python
最新推荐文章于 2022-05-06 11:14:06 发布