一、题意
给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数就是只包含质因数 2、3 和/或 5的正整数。
二、解法
解法:
动态规划
设dp为丑数数组,设置三个下标l1=1,l2=1,l3=1,对于第i个丑数一定是min{dp[l1]*2,dp[l2]*3,dp[l3]*5},然后与dp[l1]*2,dp[l2]*3,dp[l3]*5对比,如果相等就对应下标加一。dp[1]=1
时间复杂度:
O
(
n
)
O(n)
O(n)
空间复杂度:
O
(
n
)
O(n)
O(n)
三、代码
解法:
int nthUglyNumber(int n) {
int cnt=1;
int ans=1;
int dp[1700];
dp[1]=1;
int l1=1,l2=1,l3=1;
while(cnt<n){
int v1=dp[l1]*2;
int v2=dp[l2]*3;
int v3=dp[l3]*5;
cnt++;
dp[cnt] = min( v1,min(v2,v3));
if(v1==dp[cnt]){
l1++;
}
if(v2==dp[cnt]){
l2++;
}
if(v3==dp[cnt]){
l3++;
}
}
return dp[n];
}
四、引用
[1] leetcode:264. Ugly Number II
[2] leetcode:264. Ugly Number II官方解法