题目:
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 where 1 ≤ n ≤ 30, 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"
解释:
本行的字符串是上一行的结果念say出来的结果,这种题目可以用循环也可以用递归,但是循环的速度快得多。
python代码:
class Solution:
def countAndSay(self, n):
"""
:type n: int
:rtype: str
"""
s="1"
for i in range(1,n):
init,tmp,count,=s[0],"",0
for letter in s:
if letter==init:
count+=1
else:
tmp+=str(count)+init
init=letter
count=1
#把最后一个字符的描述加进去
tmp+=str(count)+init
s=tmp
return s
c++代码:
class Solution {
public:
string countAndSay(int n) {
//刚开始需要有一个字符串,记录每次循环的变化
string s="1";
for(int i=1;i<n;i++)
{
int count=0;
string tmp="";
char init=s[0];
for(auto letter:s)
{
if(letter==init)
count++;
else
{
tmp+=to_string(count)+init;
init=letter;
count=1;
}
}
//更新最后一个字符的情况
tmp+=to_string(count)+init;
s=tmp;
}
return s;
}
};
总结:
能用循环的时候尽量不要用递归。