38. Count and Say
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"
题目链接:https://leetcode.com/problems/count-and-say/
本题题意比较难理解,其实就是:
第1行:“1”
第2行:“11” <-- 第1行里有1个1,描述第1行
第3行:“21” <-- 第2行里有2个1,描述第2行
第4行:“1211” <-- 第3行里有1个2+1个1,描述第3行
以此类推。
法一:迭代
class Solution {
public:
string countAndSay(int n) {
if (n == 1) return "1";
string s = countAndSay(n-1);
int i = 1;
int count = 1;
char c = s.at(0);
string res = "";
while(i<s.length()){
if(s.at(i) == c) ++count;
else {
res = res + to_string(count) + c;
c = s.at(i);
count = 1;
}
++i;
}
res = res + to_string(count) + c;
return res;
}
};
法二:循环
class Solution {
public:
string countAndSay(int n) {
if (n == 1) return "1";
string s = "1";
int start = 2;
while(start <= n){
int i = 1;
int count = 1;
char c = s.at(0);
string res = "";
while(i<s.length()){
if(s.at(i) == c) ++count;
else {
res = res + to_string(count) + c;
c = s.at(i);
count = 1;
}
++i;
}
res = res + to_string(count) + c;
s = res;
++start;
}
return s;
}
};
反思
本题的要点有:
1.题意的理解
2.c++中string和char的用法
3.递归和循环的代码练习


4478

被折叠的 条评论
为什么被折叠?



