关键词:动态规划 三指针
我用暴力的动态规划+哈希做,然后超时了~
我觉得这个大哥写的很不错!
题目:
思路:
复杂度计算:
时间复杂度O(n)
空间复杂度O(n)
代码:
class Solution {
public:
int nthUglyNumber(int n) {
if(n==1) return 1;
vector<int> dp(n);
dp[0]=1;
int a=0,b=0,c=0;
for(int i=1;i<n;i++)
{
dp[i]=min(min(dp[a]*2,dp[b]*3),dp[c]*5);
if(dp[i]==dp[a]*2)
a++;
if(dp[i]==dp[b]*3)
b++;
if(dp[i]==dp[c]*5)
c++;
}
return dp[n-1];
}
};
我第一次写的:超时了
class Solution {
public:
int nthUglyNumber(int n) {
if(n==1) return 1;
unordered_map<int,int> hash;
hash[1]=1;
int count=1;
int i=1;
while(count<n)
{
i++;
if((i%2==0&&hash.find(i/2)!=hash.end())||(i%3==0&&hash.find(i/3)!=hash.end())||(i%5==0&&hash.find(i/5)!=hash.end()))
{
count++;
hash[i]=1;
}
}
return i;
}
};