Javatpoint Logo
Javatpoint Logo



Ugly Figures: A Conception in Data Structures and Algorithms (DSA) is an intriguing account of several generalities extensively used in algorithmic design and dynamic programming. An unsolved number is described as an effective integer if its vertex rudiments are only two, three, or 5. An unattractive number in rulings is one whose effective advanced rudiments are 2, 3, or 5. It can be expressed as (2a exemplifications 3b five times c) of(a), ( b)., and(c) are nonthreatening integers.

These nonspecific figures find mileage in algorithmic problems, especially in cases where optimization and performance are critical. The conception of unwelcome figures is routinely used in dynamic programming hunt situations, as well as in cases involving the discovery of the utmost aversive variable or determining whether a given number is aversive, whether it is.

One common use of non-decorative figures is to sort similar figures. Dynamic design is frequently used to optimize these sequences. Algorithms can be designed to reiterate through figures, check for division by 2, 3, and 5, and update arbitrary sequences of figures consequently. This can lead to a stylish answer to information that provides or adapts based on specific constraints.

Also, non-repair figures play a part in reducing the time complexity of the good algorithm. Their design allows for dynamic process feedback that reduces typical calculation time by combating spare calculation. For illustration, you can use dynamic programming to find the utmost unwelcome range without looking at different precedencies constantly.

There are three methods for implementation of the above program of ugly numbers in DSA:

Method 1: Simple:

Loop for all positive integers until the unattractive number count is lower than n; if an integer is unattractive, the unattractive number count also proliferates.

To check if a number is unattractive, divide the number by the topmost separable powers of 2, 3, and 5. If the number becomes 1, it's also an unattractive number; otherwise, it's not.

For illustration, let us see how to check if 300 is unattractive or not. The greatest separable power of 2 is 4, and after dividing 300 by 4, we get 75. The greatest separable power of 3 is 3. After dividing 75 by 3, we get 25. The greatest separable power of 5 is 25, and after dividing 25 by 25, we get 1. Since we get 1 eventually, 300 is an unattractive number.

Implementation of simple method:




The handed Python law calculates the utmost unwelcome number, wherein an "uncomely range" is defined as a high-quality integer whose high factors are confined to 2, 3, or 5. The maxDivide specific is a coadjutor point that divides colorful a through the finest separable electricity of every other volume b until it's no longer separable. This function is used to reduce the input range by dividing it with the aid of its rudiments 2, 3, and 5.

The ugly function checks whether a given variety is an unattractive number. It is time and again called maxDivide to divide the range through 2, 3, and 5 as long as it remains divisible. However, it means that the original wide variety comes in an unattractive range if the preceding range becomes 1.

The getNthUglyNo function calculates the utmost uncomely variety. It makes use of a while circle to reiterate through integers, checking if each bone is an unattractive volume by calling the isUgly function. However, the matter of unattractive figures is increased if it's long hauls. This system keeps going until the count reaches the most uncommon number.

In the motorist law, the getNthUglyNo function is called with the argument 150, and the result is outlined. The affair indicates that the one-hundred-and-fiftieth unattractive volume is the figure assigned to a variable no. The law demonstrates a simple system for locating unwelcome figures by means of iteratively checking every range until the requested unattractive number is reached. Note that this fashion will not be the most effective for massive values of n, as it relies on incrementing via figures and checking for ugliness.

This method is not time efficient as it checks for all integers until the ugly number count becomes n, but the space complexity of this method is O (1)

Method 2: Using Dynamic method:

Then's a time-effective result with O(n) redundant space. The unattractive number sequence is 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15,

Because every number can only be divided by 2, 3, or 5, one way to look at the sequence is to resolve it into three groups, as below:

(1 × 2, 2 × 2, 3 × 2, 4 × 2, 5 × 2,

(2) 1 × 3, 2 × 3, 3 × 3, 4 × 3, 5 × 3,

(3) 1 × 5, 2 × 5, 3 × 5, 4 × 5, 5 × 5,

We can find that every subsequence is the unattractive sequence itself( 1, 2, 3, 4, 5). Multiply 2, 3, 5. Also, we use the analogous merge system or merge sort, to get every unattractive number from the three subsequences. For every step, we choose the lowest one and move one step after.

1: Declare an array of unattractive figures ( n)

2: Initialize the first unattractive no unattractive( 0) = 1

Initialize three array indicator variables (i2, i3, and i5) to point to

the first element of the unattractive array

i2 = i3 = i5 = 0;

4: Initialize 3 choices for the coming unattractive

= unattractive(i2) * 2;

= unattractive(i3) * 3

= unattractive(i5) * 5;

5 Now go in a circle to fill all unattractive figures until 150.

For( i = 1; i< 150 i)

* These small ways aren't optimized for good

readability. Will optimize them in the C program.

= Min (next_multiple_of_2,



unattractive(i) = next_ugly_no

if (next_ugly_no == next_multiple_of_2)

i2 = i2 1;

= unattractive(i2) * 2;

if (next_ugly_no == next_multiple_of_3)

i3 = i3 1;

= unattractive(i3) * 3;

if (next_ugly_no == next_multiple_of_5)

i5 = i5 1;

= unattractive(i5) * 5;

* End of the circle */

6. returnnext_ugly_no


Let us see how it works.


unattractive() = | 1|

i2 = i3 = i5 = 0;

First replication

unattractive(1) = Min(unattractive(i2) * 2, unattractive(i3) * 3, unattractive(i5) * 5)

= Min (2, 3, 5)

= 2

unattractive() = | 1| 2|

i2 = 1, i3 = 0, i5 = 0 (i2 got incremented).

Alternate replication

unattractive( 2) = Min (unattractive(i2) * 2, unattractive(i3) * 3, unattractive(i5) * 5)

= Min (4, 3, 5)

= 3

unattractive() = | 1| 2| 3|

i2 = 1, i3 = 1, i5 = 0 (i3 got incremented).

Third replication

unattractive(3) = Min(unattractive(i2) * 2, unattractive(i3) * 3, unattractive(i5) * 5)

= Min (4, 6, 5)

= 4

unattractive() = | 1| 2| 3| 4|

i2 = 2, i3 = 1, i5 = 0 (i2 got incremented).

Fourth replication

unattractive( 4) = Min (unattractive (i2) * 2, unattractive (i3) * 3, unattractive (i5) * 5)

= Min (6, 6, 5)

= 5

unattractive() = | 1| 2| 3| 4| 5|

i2 = 2, i3 = 1, i5 = 1 (i5 got incremented).

Fifth replication

unattractive( 4) = Min (unattractive (i2) * 2, unattractive (i3) * 3, unattractive (i5) * 5)

= Min (6, 6, 10)

= 6

unattractive() = | 1| 2| 3| 4| 5| 6|

i2 = 3, i3 = 2, i5 = 1( i2 and i3 got incremented).

I will continue the same way till I< 150.

Implementation of dynamic method usage:




The supplied Python software efficiently calculates the utmost uncomely wide variety, where an "uncomely volume" is described as a tremendous integer whose high factors are limited to 2, 3, or 5. The function getNthUglyNo utilizes dynamic programming and the conception of incorporating arrays to induce the utmost unwelcome variety without the time and again checking divisibility.

The set of rules continues an array of uncomely to the calculated uncomely figures. It initializes the primary detail unattractive (0) as 1, and 3 recommendations (i2, i3, i5) constitute the indicators for multiples of two, 3, and 5. The variables next_multiple_of_2, next_multiple_of_3, and next_multiple_of_5 keep the following capability: unattractive figures for every aspect.

The circle iterates via the array, streamlining every unattractive (l) by deciding on the minimal value of numerous of the to-be-had multiples. The tips are also incremented for that reason, and the posterior implicit multiples are calculated. This procedure effectively merges the sorted multiples of 2, 3, and 5, ensuring that the array always contains the lowest unattractive volume.

In the handed illustration, the motorist law units n to one hundred fifty and calls the getNthUglyNo point, publishing the result, which is the 150th unattractive volume. This fashion minimizes calculations and guarantees a brisk and more optimized result for chancing uncomely figures compared to many different brute-pressure strategies.


Method 3: Using SET Data Structure

In this system, the SET data structure stores the minimum of the 3 generated unattractive figures, which will be the Ugly Number stored at the first position of the set. SET Data Structure as a set store all the elements in thrusting order

Below is the perpetration of the below approach:

Implementation of set usage method:




The above Python implementation calculates the nth unpleasant quantity using a fixed-primarily-based method. An ugly number is defined as an effective integer whose top factors are confined to 2, 3, or 5. The function `nthUglyNumber` initially handles base cases for n equal to 1, 2, 3, 4, or 5, returning n itself as the result.

For instances where n is more than five, the characteristic initializes a list 's' with the first ugly range, which is 1. It then enters a loop that iterates n times, updating the set 's' with new, ugly numbers.

Within the loop, the set of rules extracts the primary element (`it`) from the set 's', deletes it, and converts the set to a list to facilitate sorting. The characteristic then multiplies this detail via 2, 3, and 5, adding the results again to the set. This set continues a looked-after order of unpleasant numbers.

After the loop completes, the characteristic returns the pinnacle detail of the set, which represents the nth ugly wide variety. The set serves as a dynamic box for dealing with and updating unpleasant numbers correctly, ensuring the best order and keeping off needless recalculations.

In this instance, the driver code units `n` to one hundred fifty and calls the `nthUglyNumber` feature, printing the result, which is the one hundred and fiftieth ugly wide variety. The method demonstrates a different approach for generating unpleasant numbers using a set, offering an opportunity solution to the problem.


In the end, unwelcome figures, defined via their high rudiments limited to two, three, or five, save significance in Data Structures and Algorithms (DSA). They give sensible programs algorithmic challenges, which include changing the utmost uncomely volume or figuring out the spectacle of a given range. Colorful, effective processes, along with iterative styles and dynamic programming, live to produce sequences of unattractive figures.

The idea of incorporating sorted arrays provides an elegant result, demonstrating the way to produce unattractive figures without spare computations successfully. Ugly figures discover mileage in situations where optimized and confined factorization is vital, contributing to algorithmic trouble-working strategies.

The observation and perpetration of uncomely figures donate to a deeper understanding of the number principle, offering treasured perceptivity into algorithmic optimization strategies. Their particular high element constraints make them fascinating content for disquisition and alertness in different algorithmic issues. Overall, the consideration and manipulation of uncomely figures enrich the toolkit of algorithms, enhancing the performance of answers in colorful computational situations.

Youtube For Videos Join Our Youtube Channel: Join Now


Help Others, Please Share

facebook twitter pinterest

Learn Latest Tutorials


Trending Technologies

B.Tech / MCA