class Solution:
    def nthUglyNumber(self, n: int) -> int:
        # time O(1) space O(1)
        res = [1]
        i2,i3,i5= 0,0,0
        while n > 1:
            u2,u3,u5 = res[i2]*2,res[i3]*3,res[i5]*5
            minui = min(u2,u3,u5)
            if minui % 2 == 0:
                i2 += 1 
            if minui % 3 == 0:
                i3 += 1 
            if minui % 5 == 0:    
                i5 += 1 
            res.append(minui)
            n -= 1
        return res[-1]