If we pick a naive approach we will end up getting time exceeded error.So,we will solve this problem more efficiently Using Dynamic Programming
Algorithm:
1.Intialize an array result of size n
2.Update result[0] = 1
3.Intialize pointers p2,p3 and p5 to 0 (pointer for value 2,3 and 5)
4.Loop from i:1 to N
=>find the minimum of three value (2*result[p2],3*result[p3] and 5*result[p5])
=>put the value at the index i
=>if minimum = 2*result[p2], then increment p2.
=>if minimum = 3*result[p3], then increment p3.
=>if minimum = 5*result[p5], then increment p5.
5.return last value of result array.
Python Code:
class Solution(object):
def nthUglyNumber(self, n):
res = []
res.append(1)
p2 = 0
p3 = 0
p5 = 0
for i in range(1,n+1):
minimum = min(res[p2]*2,res[p3]*3,res[p5]*5)
res.append(minimum)
if minimum == res[p2]*2:p2+=1
if minimum == res[p3]*3:p3+=1
if minimum == res[p5]*5:p5+=1
return res[n-1]
0 Comments