LeetCode #263 #264 2018-08-07

263. Ugly Number

https://leetcode.com/problems/ugly-number/description/

这道题比较简单,相当于从num中不断除去2,3,5,最后比较结果是否为1即可。
代码如下:

class Solution:
    def isUgly(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if num <= 0:
            return False
        for i in (2, 3, 5):
            while num % i == 0:
                num /= i
        return num == 1

264. Ugly Number II

https://leetcode.com/problems/ugly-number-ii/description/

解法相当于利用了3个指针,每次取三种可能结果里最小的。
需要注意的是每个判断都需要用if单独判断,使用elif会错误。因为result[i2]2和result[i3]3可能相等,例如32==23,此时i2和i3都需要加1才正确。
代码如下:

class Solution:
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        result = [1]
        i2, i3, i5 = 0, 0, 0
        for i in range(1, n):
            u2, u3, u5 = result[i2]*2, result[i3]*3, result[i5]*5
            umin = min((u2, u3, u5))
            if umin == u2:
                i2 += 1
            if umin == u3:
                i3 += 1
            if umin == u5:
                i5 += 1
            result.append(umin)
        return result[-1]

你可能感兴趣的:(LeetCode #263 #264 2018-08-07)