C ++中的丑陋数字II
假设我们必须找到第n个丑数,所以我们必须定义一个可以找到它的方法。我们知道丑陋的数字就是那些素数只有2、3和5的数字。因此,如果我们想找到第10个丑陋的数字,那就是12,因为前几个丑陋的数字是1、2、3,4,5,6,8,9,10,12
为了解决这个问题,我们将遵循以下步骤-
制作大小为n+1的数组v
如果n=1,则返回1
两个:=2,三个=3和五个=5,towIndex:=2,threeIndex:=2和FiveIndex:=2
对于我2到n
curr:=2、3和5中的最小值
v[i]:=curr
如果curr=2,则两个:=v[twoIndex]*2,将twoIndex增加1
如果curr=3,则三个:=v[threeIndex]*3,将threeIndex增加1
如果curr=5,则5:=v[fiveIndex]*3,将FiveIndex增加1
返回v[n]
例子(C++)
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int nthUglyNumber(int n) {
vector <int> v(n + 1);
if(n == 1){
return 1;
}
int two = 2, three = 3, five = 5;
int twoIdx = 2;
int threeIdx = 2;
int fiveIdx = 2;
for(int i = 2; i <= n; i++){
int curr = min({two, three, five});
v[i] = curr;
if(curr == two){
two = v[twoIdx] * 2;;
twoIdx++;
}
if(curr == three){
three = v[threeIdx] * 3;
threeIdx++;
}
if(curr == five){
five = v[fiveIdx] * 5;
fiveIdx++;
}
}
return v[n];
}
};
main(){
Solution ob;
cout << (ob.nthUglyNumber(10));
}输入值
10
输出结果
12