Description

An ugly number is a positive integer which does not have a prime factor other than 2, 3, and 5.

Given an integer n, return true if n is an ugly number.

Example 1:

  • Input: n = 6
  • Output: true
  • Explanation: 6 = 2 × 3

Example 2:

  • Input: n = 1
  • Output: true
  • Explanation: 1 has no prime factors.

Example 3:

  • Input: n = 14
  • Output: false
  • Explanation: 14 is not ugly since it includes the prime factor 7.

Constraints:

  • -231 <= n <= 231 - 1

Submitted Code

class Solution(object):
    def isUgly(self, n):
        """
        :type n: int
        :rtype: bool
        """
        if n <= 0:
            return False
        
        for p in [2, 3, 5]:
            while n % p == 0:
                n //= p
                
        return n == 1     # 마지막에 남은 숫자가 1이면 true

Runtime: 0 ms | Beats 100.00%
Memory: 12.46** MB | Beats 52.80%

필수 소수인 2, 3, 5를 리스트에 저장하는 방식을 사용했다.

Other Solutions

1st

class Solution(object):
    def isUgly(self, n):
        if n <= 0:
            return False
        
        while n % 2 == 0:
            n //= 2
        while n % 3 == 0:
            n //= 3
        while n % 5 == 0:
            n //= 5
        
        return n == 1

time complexity: 𝑂(log𝑛)
space complexity: 𝑂(1)

Leave a comment