leetcode【字符串】-----38. Count and Say(报数)
程序员文章站
2022-07-15 13:06:26
...
1、题目描述
2、分析
如题,输入1,则输出1。输入2,则表示上一个数1,出现1次,则输出11。输入3,上一个数是11,则表示为1出现两次,则输出21,同理输入4,上一个数是21,则输出1211。
也就是根据输入的数字n,求此时对应的输出,那么就要求到前面所有的输出。首先如果输入n小于1,直接输出空字符串。然后定义初始字符串为1,以--n为循环,设置一个中间变量字符串用来记录,每一次循环之后的结果,设置计数器用来计同一个连续字符出现的次数。to_string(cnt)将cnt(数字)转换为字符。并且新的字符串最后一个字符肯定是1。
3、代码
class Solution {
public:
string countAndSay(int n) {
if(n<1) return "";
string res="1";
while(--n){
string cur="";
for(int i=0;i<res.size();++i){
int cnt=1;
//判断是不是有连续相同字符
while(i+1<res.size()&&res[i]==res[i+1]){
++cnt;
++i;
}
cur+=to_string(cnt)+res[i];
}
//更新结果
res=cur;
}
return res;
}
};
4、相关知识点
to_string(1),将数字1转换成字符1。