描述
报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:
1, 11, 21, 1211, 111221, ...
1
读作 "one 1"
-> 11
.
11
读作 "two 1s"
-> 21
.
21
读作 "one 2, then one 1"
-> 1211
.
给定一个整数 n
, 返回 第 n
个顺序。
整数的顺序将表示为一个字符串。
您在真实的面试中是否遇到过这个题?
是
样例
给定 n = 5
, 返回 "111221"
.
我尝试直接从n中找出规律,发现没有规律可循。从第一个一步步推导比较简单。
class Solution {
public:
/**
* @param n: the nth
* @return: the nth sequence
*/
string countAndSay(int n) {
// write your code here
if (n <= 0) {
return string("");
}
string result("1");
for (int i = 1; i < n; i++) {
string temp;
int count = 1, j;
for (j = 0; j < result.size() - 1; j++) {
if (result[j] == result[j + 1]) {
count++;
}
else{
temp += ('0' + count);
temp += result[j];
count = 1;
}
}
if (j > 0 && result[j] == result[j - 1]) {
temp += ('0' + count);
temp += result[j];
}
else {
temp += '1';
temp += result[j];
}
result = temp;
}
return result;
}
};