【剣指offer】34.ブス数(python)

5643 ワード

タイトルの説明
素因数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