LeetCode题解——外观数列
- 题目介绍
- 解题思路
- 这题也有点类似动态规划的意思
- 这题的最核心的部分就是将一个字符串进行分割,统计出用多少个相同的字符,11就是21表示2个1,21就是1211表示1个2,1个1
- 图中所知第一次字符串是1固定的,然后传入一个次数的值n,表示解析第n-1次的结果字符串,那第n-1次的结果字符串是怎么来的呢,就是解析的n-2次的结果字符串
- 已知第一次为1,我们可以第二次的字符串解析结果就是11表示1个1,那么可以依次获取到第n次的解析结果了,代码示例我用的是非递归的方法
- 代码示例
class Solution {
public:
string countAndSay(int n) {
string temp = "1";
string res;
if(n == 1) {
return "1";
}
for(int i = 2; i <= n; i++){
int len = temp.length();
res.clear();
for(int j = 0; j < len; j++){
char cur = temp[j];
int count = 1;
while(cur == temp[j+1] && j<len){
count++;
j++;
}
res += std::to_string(count) + cur;
count = 1;
}
temp = res;
}
return res;
}
};