题目:输出第n个外观数列的值
- 1
- 11
- 21
- 1211
- 111221
第一项是数字 1
描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”
描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 “21”
描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 “1211”
描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 “111221”
思路:
- 用两个字符串存储,一个用于前一个描述,一个用于当前解存储
- 对字符串进行扫描,用一个计数器记录重复的个数
代码:
class Solution {
public:
string countAndSay(int n) {
string str="";
string ans="1";
for(int i=0;i<n-1;i++){
int count=1;
str = ans;
ans = "";
for(int j=0;j<str.length();j++){
if(str[j]==str[j+1])
count++;
else{
ans+=to_string(count)+str[j];
count=1;
}
}
}
return ans;
}
};