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.
Note: The sequence of integers will be represented as a string.
分析
模拟。
代码
// Count and Say
// @author 连城 (http://weibo.com/lianchengzju)
// 时间复杂度O(n^2),空间复杂度O(n)
class Solution {
public:
string countAndSay(int n) {
string s("1");
while (--n)
s = getNext(s);
return s;
}
string getNext(const string &s) {
stringstream ss;
for (auto i = s.begin(); i != s.end(); ) {
auto j = find_if(i, s.end(), bind1st(not_equal_to(), *i));
ss << distance(i, j) << *i;
i = j;
}
return ss.str();
}
};
原文: https://soulmachine.gitbooks.io/algorithm-essentials/content/cpp/string/count-and-say.html