Ugly Number

263 Ugly Number I

Check if a number is ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. 1 is usually consider as an ugly number.

public boolean isUgly(int num) {
    int[] ugly = {2, 3, 5};
    for (int prime : ugly){
        while(num % prime == 0 && num > 0){
            num /= prime;
        }
    }
    return num == 1;
}

264 Ugly number II

Write a program to find the n-th ugly number.

  • All the ugly numbers are in format 2^a x 3^b x 5^c, ugly numbers are subsequence factor of ugly numbers.

    1. Time O(n^2), Space O(1). Loop increasing number, check if it is a ugly number.

    2. Time O(n), Space O(n). Dynamic programming, Record the subsequence of prime factors and find the smallest.

public int nthUglyNumber(int n) {
    int index_2 = 0, index_3 = 0, index_5 = 0; // the index on array
    int factor_2 = 1, factor_3 = 1, factor_5 = 1; // start with 1
    int[] arr = new int[n];
    int min = 1;

    for( int i = 0; i < n; i++){
        arr[i] = min;
        if (factor_2 == min) factor_2 = arr[index_2++] * 2;
        if (factor_3 == min) factor_3 = arr[index_3++] * 3;
        if (factor_5 == min) factor_5 = arr[index_5++] * 5;

        min = Math.min(factor_2, Math.min(factor_3, factor_5));
    }
    return arr[n-1];
}

313 Super ugly number

Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k.

Last updated