【leetcode】38. Count and Say
程序员文章站
2022-03-23 18:45:41
...
题目:
思路:
读懂题目之后就比较简单了。例如题目中的那个序列,解释如下:
- 1(初始值)
- 1个1,简写为11
- 2个1,简写21
- 1个2,1个1,简写为1211
- 1个1,1个2,2个1,简写为111221
······
发现规律没,连续相同的数会压缩成“几个几”的形式。
我感觉逆推回去也行呢。
代码实现:
class Solution {
public:
string countAndSay(int n) {
if (n <= 0){
return "";
}
string s = "1";
for (int i = 1; i < n; ++i){
string s2;
int count = 1;
char val = s[0];
for (int j = 1; j < s.length(); ++j){
if (s[j-1] == s[j]){
++count;
}else{
s2 += to_string(count);
s2 += val;
count = 1;
val = s[j];
}
}
s2 += to_string(count);
s2 += val;
s = s2;
}
return s;
}
};
拓展:
不管打印到后面多少位,出现的数字只是由 1, 2 和3 组成。
参考:https://www.cnblogs.com/grandyang/p/4086299.html