LeetCode 38 Count and Say (Count and report)
Translation
The count report sequence increases progressively according to the following rules: 111221 ,...... 1 read as "1" or 11.11 read as "2 1" or 21.21 read as "1 2, 1 1" or 1211. Given an integer n, generate the nth sequence. Note: The numeric sequence should be represented by a string.
Original
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.
Code
In fact, it is not difficult to answer a question, but it is because the English language has never understood it until it has been understood by others.
class Solution{public: string countAndSay(int n) { if(n == 1) return "1"; string result = "1"; for(int i = 1; i < n; ++i) { result = convert(result); } return result; } string convert(string str) { int len = str.length(); if(len == 1) return "1" + str; string result; int count = 1; for(int i = 1; i < len; ++i) { if(str[i-1] == str[i]) count++; else { result = result + static_cast
(count + '0') + str[i-1]; count = 1; } if(i == len - 1) result = result + static_cast
(count + '0') + str[i]; } return result; }};
Then I wrote this myself ......
class Solution {public: string countAndSay(int n) { if (n == 1) { return "1"; } else { string output = countAndSay(n - 1), result = ""; int index = 0; while (index < output.size()) { char current = output[index]; int cursor = index, count = 0; while (output[cursor] == current && cursor < output.size()) { cursor++; count++; } char number = count + '0'; result += number; result += current; index += count; } return result; } }};