Ugly Number

只能2,3,5整除,那就模2,3,5就是了,递归迭代都很容易写

class Solution(object):
    def isUgly(self, num):
        """
        :type num: int
        :rtype: bool
        """
        if 0 < num <= 10:
            return num != 7

        if num <= 0:
            return False

        flag = False
        if num % 2 == 0:
            num /= 2
            flag = True
        if num % 3 == 0:
            num /= 3
            flag = True
        if num % 5 == 0:
            num /= 5
            flag = True
        return self.isUgly(num) if flag else False

Ugly Number II

首先是用堆来约束顺序的方法,注意需要set查重,时间复杂度O(nlgn)

class Solution(object):
    def nthUglyNumber(self, n):
        """
        :type n: int
        :rtype: int
        """
        count = 0
        heap = [1]
        result = None
        checker = set([1])
        while count < n:
            node = heapq.heappop(heap)
            result = node
            count += 1
            if node * 2 not in checker:
                checker.add(node * 2)
                heapq.heappush(heap, node * 2)
            if node * 3 not in checker:
                checker.add(node * 3)
                heapq.heappush(heap, node * 3)
            if node * 5 not in checker:
                checker.add(node * 5)
                heapq.heappush(heap, node * 5)

        return result

results matching ""

    No results matching ""