题目:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路一:
动态维护三个队列
代码:
class Solution:
def GetUglyNumber_Solution(self, index):
if index == 0: return 0
res = 1
queue_2, queue_3, queue_5 = [], [], []
for i in range(index-1):
queue_2.append(res*2)
queue_3.append(res*3)
queue_5.append(res*5)
res = min(queue_2[0], queue_3[0], queue_5[0])
if res == queue_2[0]: queue_2.pop(0)
if res == queue_3[0]: queue_3.pop(0)
if res == queue_5[0]: queue_5.pop(0)
return res
思路二:
记录三个指针
代码:
class Solution:
def GetUglyNumber_Solution(self, index):
if index == 0: return 0
res = 1
p2, p3, p5 = 0, 0, 0
arr = []
arr.append(res)
for i in range(index-1):
res = min(arr[p2]*2, arr[p3]*3, arr[p5]*5)
if res == arr[p2]*2: p2+=1
if res == arr[p3]*3: p3+=1
if res == arr[p5]*5: p5+=1
arr.append(res)
return res