题目:输出第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;
}
};
这篇博客探讨了外观数列的定义和生成方法。通过递归地描述前一个数字的组成来构建序列,例如从1开始,第二项为11,第三项为21,以此类推。代码实现中,使用两个字符串分别存储前一个描述和当前解,并通过遍历和计数来构造新的描述。这个过程展示了如何通过编程逻辑来理解和生成这种数列。
216

被折叠的 条评论
为什么被折叠?



