【剣指offer】34.ブス数(python)
5643 ワード
タイトルの説明
素因数2,3,5のみを含む数をブス数(Ugly Number)と呼ぶ.例えば、6、8はすべて醜数であるが、14は質量因子7を含むためではない.習慣的に私たちは1を最初の醜数と見なしています.小さいから大きい順のN番目の丑数を求めます.
構想
『剣指offer』P 182は、小さい頃からすべての醜数を順番に数え、保存している.
code
素因数2,3,5のみを含む数をブス数(Ugly Number)と呼ぶ.例えば、6、8はすべて醜数であるが、14は質量因子7を含むためではない.習慣的に私たちは1を最初の醜数と見なしています.小さいから大きい順のN番目の丑数を求めます.
構想
『剣指offer』P 182は、小さい頃からすべての醜数を順番に数え、保存している.
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