49. Ugly numbers (medium)

Title description:

我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:  
1 是丑数。
n 不超过1690。
class Solution(object):
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        # 由于丑数是质因数只有2,3,5的数(1除外)。 因此丑数可以定义为 2 ^ x * 3 ^ y * 5 ^ z。

        # 我们定义三种状态:
        # 最后一个乘的质因数是2
        # 最后一个乘的质因数是3
        # 最后一个乘的质因数是5
        # 为了简单起见,我们定义三个指针,分别指向上一个乘的质因数是2, 乘的质因数是3, 乘的质因数是5的位置。

        p1=p2=p3=0
        states=[1]*n
        for i in range(1,n):
            states[i]=ith=min(states[p1]*2,states[p2]*3,states[p3]*5)
            if ith == states[p1]*2: p1 +=1
            if ith == states[p2]*3: p2 +=1            
            if ith == states[p3]*5: p3 +=1
        return states[-1]

 

Guess you like

Origin blog.csdn.net/weixin_38664232/article/details/104987688