报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:
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"
.
class Solution {
public:
/**
* @param n the nth
* @return the nth sequence
*/
string countAndSay(int n) {
// Write your code here
string res = "1";
while(--n)
{
int count = 1;
string temp = "";
for (int i = 1; i < res.size(); ++i)
{
if(res[i] == res[i-1])
{
count++;
}
else
{
temp += to_string(count)+res[i-1];
count = 1;
}
}
temp += to_string(count)+res.back();
res = temp;
}
return res;
}
};
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<char>(), *i));
ss << distance(i, j) << *i;
i = j;
}
return ss.str();
}
};