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.
Idea:Based on the string of previous string, count the digits, then the string will be the # + digits
1. get the count-and-say sequence
2. count the number of the same continuous digits.
3. form the number of digits following by digit string.
4. return the string.
class Solution {
public:
string countAndSay(int n) {
if(n <= 0) return "";
if(n == 1) return "1";
string result = "1"; // used to store result;
int flag = 1; //set a flag to show the number.
while(flag++ < n){
//flag++; // used to sign the round of loop
int count = 1;
int i = 0;
int j = i;
string temp;
do{
j++;
if(result[i] == result[j]) count++;
else{
temp += '0' + count;
temp += result[i];
i = j;
count = 1;//each time need to reset to 1;
}
}while(j < result.size());
result = temp;
}
return result;
}
};
Covert the number to char tips:
(1) char c = '0' + digit;
(2) C++, char c = to_string(digit);