diff --git a/algorithms/Java/README.md b/algorithms/Java/README.md index f6d60a22..51c2359f 100644 --- a/algorithms/Java/README.md +++ b/algorithms/Java/README.md @@ -9,6 +9,7 @@ - [Longest Consecutive Subsequence](arrays/longest-consecutive-subsequence.java) - [K-th Element of Two Sorted Arrays](arrays/kth-element--orted-array.java) - [Trapping Rain Water](arrays/trapping-rain-water.java) +- [Ugly Number](arrays/ugly-number.java) ## Graphs - [Dijkstras](graphs/Dijkstras.java) diff --git a/algorithms/Java/arrays/ugly-number.java b/algorithms/Java/arrays/ugly-number.java new file mode 100644 index 00000000..4f787bb3 --- /dev/null +++ b/algorithms/Java/arrays/ugly-number.java @@ -0,0 +1,113 @@ +// Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … shows the first 11 ugly numbers. +// By convention, 1 is included. Write a program to find Nth Ugly Number + +// Algorithm : +// Initialize three-pointers two, three, and five pointing to zero. +// Take 3 variables nm2, nm3, and nm5 to keep track of next multiple of 2,3 and 5. +// Make an array of size n to store the ugly numbers with 1 at 0th index. +// Initialize a variable next which stores the value of the last element in the array. +// Run a loop n-1 times and perform steps 6,7 and 8. +// Update the values of nm2, nm3, nm5 as ugly[two]*2, ugly[three]*3, ugly[5]*5 respectively. +// Select the minimum value from nm2, nm3, and nm5 and increment the pointer related to it. +// Store the minimum value in variable next and array. +// Return next. + + +import java.util.*; +class ugly_number { + /* Function to get the nth ugly number*/ + public long getNthUglyNo(int n) { + long[] ugly = new long[n]; + int two=0, three=0, five=0; + long nm2=2, nm3=3, nm5=5; + long next = 1; + + ugly[0] = 1; + + for(int i=1; i