Advertisement
Guest User

264. Ugly Number II

a guest
Apr 7th, 2020
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.84 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int nthUglyNumber(int n) {
  4.         vector<int> p = {2, 3, 5};
  5.         vector<long long> dp(n, numeric_limits<int>::max());
  6.         dp[0] = 1;
  7.        
  8.         vector<int> last_pos(p.size(), 0);
  9.        
  10.         for (int i = 1; i < n; i++)
  11.         {
  12.             int pos = -1;
  13.             for (int k = 0; k < p.size(); k++)
  14.             {
  15.                 while(dp[last_pos[k]] * static_cast<long long>(p[k]) <= dp[i - 1])
  16.                     last_pos[k] += 1;
  17.                
  18.                 if (dp[last_pos[k]] * static_cast<long long>(p[k]) < dp[i])
  19.                 {  
  20.                     dp[i] = dp[last_pos[k]] * static_cast<long long>(p[k]);
  21.                     pos = k;
  22.                 }
  23.             }
  24.            
  25.             last_pos[pos] += 1;
  26.         }
  27.        
  28.         return dp.back();
  29.     }
  30. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement