题目描述
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
思路
《剑指offer》P182
从小到大依次所有的丑数,并保存。
code
# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index == 1 or index == 0:
return index
numbers = [1]
number2 = numbers[0] * 2
number3 = numbers[0] * 3
number5 = numbers[0] * 5
n2 = 0
n3 = 0
n5 = 0
while len(numbers) < index:
minNumber = self.minInNumbers(number2, number3, number5)
numbers.append(minNumber)
if minNumber == number2:
n2 += 1
number2 = numbers[n2] * 2
if minNumber == number3:
n3 += 1
number3 = numbers[n3] * 3
if minNumber == number5:
n5 += 1
number5 = numbers[n5] * 5
return numbers[len(numbers) - 1]
def minInNumbers(self, x1, x2, x3):
tmp = x1
if x1 > x2:
tmp = x2
if x3 > tmp:
return tmp
else:
return x3