什么是网站交互性,网络营销相关理论,做网站找我,自学网站开发哪个网站好外观数列
题目描述#xff1a;
「外观数列」是一个数位字符串序列#xff0c;由递归公式定义#xff1a;
countAndSay(1) 1countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。
行程长度编码#xff08;RLE#xff09;是一种字符串压缩方法#xff0c…外观数列
题目描述
「外观数列」是一个数位字符串序列由递归公式定义
countAndSay(1) 1countAndSay(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
解释
这是基本情况。
提示
1 n 30
思路分析 根据题意进行模拟从起始条件 k1 时 ans 1 出发逐步递推到 kn 的情况对于第 k 项而言其实就是对第 k−1项的「连续段」的描述而求「连续段」长度可以使用双指针实现。
代码实现注解
class Solution {public String countAndSay(int n) {//设ans的初始值为1String ans 1;for(int i 2; in;i){//cur用来存放当前连续段String cur ;//len为前一个连续段的长度int len ans.length();//遍历前一个连续段得到当前描述for(int j 0;jlen; ){//k指向当前遍历位置int k j1;//判断前后两数是否相同相同则累加while(klen ans.charAt(j) ans.charAt(k))k;//cnt用来记录重复数的个数int cnt k-j;//拼接得到curcur cnt ans.charAt(j);//将j移动到当前遍历位置j k;}ans cur;}return ans;}
}