420. Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 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 sequence.
Example
Example 1:
Input: 1
Output: "1"
Example 2:
Input: 5
Output: "111221"
Notice
The sequence of integers will be represented as a string.
Input test data (one parameter per line)How to understand a testcase?
解法1:
这个就是一个模拟题,轮到n的时候把n-1的result按规则读出来即可。
注意下面两个循环不等价
while (curPos < len && result[curPos++] == curChar) {
count++;
}
和
while (curPos < len && result[curPos] == curChar) {
curPos++;
count++;
}
第一个循环结束后curPos=2,第二个循环结束后curPos = 1。
class Solution {
public:
/**
* @param n: the nth
* @return: the nth sequence
*/
string countAndSay(int n) {
if (n <= 0) return "";
string result = "1";
for (int i = 2; i <= n; ++i) {
int len = result.size();
char curChar = result[0];
int curPos = 0;
int count = 0;
string newResult = "";
while(curPos < len) {
while (curPos < len && result[curPos] == curChar) {
curPos++;
count++;
}
newResult += to_string(count);
newResult += curChar;
if (curPos < len) {
curChar = result[curPos];
count = 0;
}
}
result = newResult;
}
return result;
}
};

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



