「外观数列」是一个数位字符串序列,由递归公式定义:
countAndSay(1) = "1"
countAndSay(n)
是countAndSay(n-1)
的行程长度编码。
行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串 "3322251"
,我们将 "33"
用 "23"
替换,将 "222"
用 "32"
替换,将 "5"
用 "15"
替换并将 "1"
用 "11"
替换。因此压缩后字符串变为 "23321511"
。
给定一个整数 n
,返回 外观数列 的第 n
个元素。
示例 1:
输入:n = 4
输出:"1211"
解释:
countAndSay(1) = "1"
countAndSay(2) = "1" 的行程长度编码 = "11"
countAndSay(3) = "11" 的行程长度编码 = "21"
countAndSay(4) = "21" 的行程长度编码 = "1211"
示例 2:
输入:n = 1
输出:"1"
解释:
这是基本情况。
提示:
思路:本题的意思是,我们拿n=2举例,11,这里边有连续的两个1,那么在n=3时,字符串就为21,2是指两个,1是对象。因此,我们利用递归的方法,找到n各个值的字符串,同时对其进行遍历,从而得到下一个字符串。
class Solution {
public:
string countAndSay(int n) {
if(n==1)return "1";
string s=countAndSay(n-1);
string ss;
int count=1;
for(int i=0;i<s.size();i++)
{
if(s[i]!=s[i+1])
{
ss+=(char)(count+'0');
ss+=s[i];
count=1;
}
else
count++;
}
return ss;
}
};