/*
* @lc app=leetcode.cn id=481 lang=cpp
*
* [481] 神奇字符串
*/
// @lc code=start
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
static const int N=100010;
static vector<int> f;
Solution(){
if(!f.empty()) return;
f.resize(N);
string s="01";
for(int i=1,j=1,cnt=0;i<N;j++){//i记录当前构造到原串位置,j记录计数串对应的到的实际位置
int last=s[s.size()-1]-'0',t=s[j]-'0';
if(last==1){
if(t==1){
s+="2";
f[i++]=++cnt;
}
else if(t==2){
s+="12";
f[i++]=++cnt;
f[i++]=++cnt;
}
}
else if(last==2){
if(t==1){
s+="1";
f[i++]=cnt;
}
else if(t==2){
s+="21";
f[i++]=f[i++]=cnt;
}
}
}
}
int magicalString(int n) {
return f[n];
}
};
vector<int> Solution::f={};
//对静态成员变量 f 的定义和初始化。在 C++ 中,对于静态成员变量,需要在类外部进行初始化,这里的初始化操作将 f 初始化为 vector。
//这样做的目的是确保 f 在程序运行过程中只会被初始化一次,而不会因为多次创建 Solution 类的实例而重复初始化。
LeetCode481 神奇字符串
最新推荐文章于 2024-09-14 22:25:23 发布
本文介绍了如何使用C++解决LeetCode中的481题——神奇字符串,通过动态规划的方法构造一个特殊字符串并计算其特定属性。代码展示了如何初始化静态成员变量来避免重复计算。
摘要由CSDN通过智能技术生成