类似leetcode的丑数II
链接:https://leetcode-cn.com/problems/ugly-number-ii/
说回这个题
而这个是只有2 3 5 7四种因子,不包含本身,即序列为4 6 8 9 10 ...
输入正整数n
输出序列中第n个数 (可能很大,对1e9+7取模)
用dp三指针实现,cpp代码如下
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int mo = 1e9+7; 6 7 int getNum(int n){ 8 vector<int> dp(n+10); 9 dp.at(0) = 1; 10 int p2,p3,p5,p7; 11 p2 = p3 = p5 = p7 = 0; 12 for(int i=1;i<n+10;++i){ 13 dp.at(i) = min(min(min(2 * dp.at(p2), 3 * dp.at(p3)), 5 * dp.at(p5)),7 * dp.at(p7)) % mo; //计算数组, 直接取模 14 if(dp.at(i) == 2 * dp.at(p2)) 15 ++p2; 16 if(dp.at(i) == 3 * dp.at(p3)) 17 ++p3; 18 if(dp.at(i) == 5 * dp.at(p5)) 19 ++p5; 20 if(dp.at(i) == 7 * dp.at(p7)) 21 ++p7; 22 } 23 for(vector<int>::iterator iter = dp.begin();iter!=dp.end(); ){ //删除2 3 5 7四个原因子 24 if( *iter == 2 || *iter == 3 || *iter == 5 || *iter == 7){ 25 iter = dp.erase(iter); 26 }else 27 iter ++ ; 28 } 29 return dp.at(n); 30 } 31 32 int main() 33 { 34 int n; 35 cin>>n; 36 cout<<getNum(n); 37 return 0; 38 }
测试输出一下序列,正确。
可惜昨晚笔试的时候没想出来