The count-and-say sequence is the sequence of integers with the first five terms as following:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1 is read off as "one
1" or 11.
11 is read off as "two
1s" or 21.
21 is read off as "one
2, then one 1" or 1211.
Given an integer n, generate the nth term of the count-and-say sequence.
Note: Each term of the sequence of integers will be represented as a string.
Example 1:
Input: 1 Output: "1"
Example 2:
Input: 4 Output: "1211"
看到这个题的时候有点蒙圈,不知道是要干啥。。。让我来简单粗暴的翻译一下吧。
当n == 1的时候,字符串是“1”,读作“一个1”, 写作“11” (第一个1表示数量,第二个1表示数字,加起来就是一个1),于是有了下一个字符串;
当n == 2的时候,字符串是“11”,读作“两个1”,写作“21”
当n == 3的时候,字符串是“21”, 读作“一个2一个1”,写作“1211”
以此类推。
这个题没啥说的就是统计上一个字符串中同样数字出现的次数,我使用了两根指针的思路。
代码如下:
class Solution {
public:
string countAndSay(int n) {
string oldNum = "1";
if (n == 1) return oldNum;
for (int i = 2; i <= n; i++) {
int start = 0;
string newNum = "";
while (start < oldNum.length()) {
int numberLen = 0;
int end = start;
while (end < oldNum.length() && oldNum[start] == oldNum[end]) {
numberLen++;
end++;
}
newNum += '0' + numberLen;
newNum += oldNum[start];
start = end;
}
oldNum = newNum;
}
return oldNum;
}
};做这个题的过程中发现了自己知识的一个漏洞,那就是十分简单的char转换为string,居然想了半天。-.-
其实只要简单相加即可:
char c = 'a';
string s = "hello world";
cout << s + c << endl;
计数与描述序列生成
637

被折叠的 条评论
为什么被折叠?



