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"
递归读取前面的数。注意读取时边界的问题
class Solution { public: string cv(int num) { string t = ""; while(num > 0) { t += (char)(num % 10 + '0'); num /= 10; } reverse(t.begin(), t.end()); return t; } string countAndSay(int n) { if (n == 1) return "1"; else { string k = countAndSay(n - 1); string tmp(""); int len = k.length(); if (len == 1) return "11"; int num = 1; for (int i = 1; i < k.length(); ++i) { if(k[i] == k[i - 1]) { num++; if (i == k.length() - 1) { tmp += cv(num); tmp += k[i - 1]; } } else { tmp += cv(num); tmp += k[i - 1]; num = 1; } } if (num == 1) { tmp += cv(num); tmp += k[len - 1]; } //cout<<tmp<<"-"<<k<<endl; return tmp; } } };
数字转字符串还有 std::to_string(int n)这东西