題目描述
報數序列是指一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1
被讀作 "one 1"
("一個一"
) , 即 11
。11
被讀作 "two 1s"
("兩個一"
), 即 21
。21
被讀作 "one 2"
, "one 1"
("一個二"
, "一個一"
) , 即 1211
。
給定一個正整數 n ,輸出報數序列的第 n 項。
注意:整數順序將表示爲一個字符串。
示例 1:
輸入: 1 輸出: "1"
示例 2:
輸入: 4 輸出: "1211"
解法
通過一個計數器來記錄連續重複的字符,輸出該計數器的值(轉換爲字符)然後輸出該重複字符,接着到下一個不重複的字符,一直循環。考慮到每一個值都依賴上一個循環的值,因此用遞歸更有效率。
class Solution {
public:
string countAndSay(int n) {
if(n == 1){
return "1";
}
string res;
int count = 1,i = 0;
int index = 0;
string temp = countAndSay(n-1);
while(index < temp.size()){
if(temp[index+1] == temp[index]){
count++;
index++;
}
else{
res.push_back(count+'0');
res.push_back(temp[index]);
index++;
count = 1;
}
}
return res;
}
};