标签:外观 string int Solution public countAndSay LeetCode 数列
给定一个正整数 n ,输出外观数列的第 n 项
「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述
1. 递归
判断相邻相等的方法每次只能处理上一个值
等价于每次比较上一个组的末位置与当前组的初始位置
最后一个值要额外处理
class Solution {
public:
string countAndSay(int n) {
if(n==1) return "1";//递归边界
string s=countAndSay(n-1);//从上一层结果继续生成
string ans="";
int count=1;//初始值为1
for(int i=1;i<s.length();i++){
if(s[i]==s[i-1]) count++;//相等则计数加
else{
ans+=(to_string(count)+s[i-1]);//否则先输出前一个值
count=1;//重置计数
}
}
return ans+to_string(count)+s.back();//这里要补上最后一组字符
}
};
2. 遍历
判断组头是否相等可以避免额外处理,统一操作
使用两个下标记录位置
class Solution {
public:
string countAndSay(int n) {
string prev = "1";
for (int i = 2; i <= n; ++i) {
string curr = "";//重置cur
int start = 0;//当前组起始位置
int pos = 0;//当前组末位置
while (pos < prev.size()) {//遍历所有字符
while (pos < prev.size() && prev[pos] == prev[start])
pos++;//定位到不重复位置
curr += to_string(pos - start) + prev[start];
start = pos;
}
prev = curr;//更新pre
}
return prev;
}
};
标签:外观,string,int,Solution,public,countAndSay,LeetCode,数列 来源: https://www.cnblogs.com/929code/p/16526207.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。